home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / custom-bib / genbst.mbs (.txt) < prev    next >
LaTeX Document  |  1995-03-09  |  92KB  |  2,808 lines

  1. %\iffalse
  2. %/////////////////////////////////////////
  3. %   Generic bibliography style           /
  4. %   for both author-year and numerical   /
  5. %   for natbib, harvard, astron styles   /
  6. %   authordate, and apalike              /
  7. %/////////////////////////////////////////
  8. % This file is self-documenting: simply LaTeX it!
  9. %% (Here are the specifications of the source file)
  10. %<*selfdoc>
  11. \ifx\undefined\endoptions\def\next{%
  12.    \NeedsTeXFormat{LaTeX2e}%
  13.    \documentclass[a4paper,11pt,twoside]{article}%
  14.    \usepackage{doc}%
  15.    \raggedbottom
  16.    \def\skipguard##1>{}\MakePercentIgnore\skipguard}\else\let\next\relax\fi
  17. \next
  18. %</selfdoc>
  19. %% \ProvidesFile{genbst.mbs}[1995/02/02 1.6 (PWD)]
  20. %\iffalse
  21. %   For use with docstrip to select various style parameters
  22. %   Default is an author-year bib style designed for my natbib.sty,
  23. %     which can also handle numerical citations.
  24. %%   For use with BibTeX version 0.99a or later
  25. %<nfss>%%     and with LaTeX2e
  26. %<!nfss>%%     and with LaTeX 2.09 or 2e
  27. %%-------------------------------------------------------------------
  28. %% NOTICE:
  29. %% This file may be used for non-profit purposes.
  30. %% It may not be distributed in exchange for money, 
  31. %%   other than distribution costs.
  32. %%   
  33. %% The author provides it `as is' and does not guarantee it in any way.
  34. %% Copyright (C) 1994, 1995 Patrick W. Daly
  35. %% Max-Planck-Institut f\"ur Aeronomie
  36. %% Postfach 20
  37. %% D-37189 Katlenburg-Lindau
  38. %% Germany
  39. %% E-mail:
  40. %% SPAN--     nsp::linmpi::daly    (note nsp also known as ecd1)
  41. %% Internet-- daly@linmpi.dnet.gwdg.de   
  42. %%-----------------------------------------------------------
  43. %% \CharacterTable
  44. %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
  45. %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  46. %%   Digits        \0\1\2\3\4\5\6\7\8\9
  47. %%   Exclamation   \!     Double quote  \"     Hash (number) \#
  48. %%   Dollar        \$     Percent       \%     Ampersand     \&
  49. %%   Acute accent  \'     Left paren    \(     Right paren   \)
  50. %%   Asterisk      \*     Plus          \+     Comma         \,
  51. %%   Minus         \-     Point         \.     Solidus       \/
  52. %%   Colon         \:     Semicolon     \;     Less than     \<
  53. %%   Equals        \=     Greater than  \>     Question mark \?
  54. %%   Commercial at \@     Left bracket  \[     Backslash     \\
  55. %%   Right bracket \]     Circumflex    \^     Underscore    \_
  56. %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
  57. %%   Right brace   \}     Tilde         \~}
  58. % \CodelineNumbered
  59. % \RecordChanges
  60. % ^^A Comment out next line with %^^A  to print coding
  61. % \OnlyDescription
  62. % \setcounter{StandardModuleDepth}{1}
  63. % \begin{document}
  64. % \setcounter{IndexColumns}{2}
  65. % \setlength{\IndexMin}{10cm}
  66. % \changes{1.0}{1993 Aug 16}{Initial version}
  67. % \changes{1.1}{1993 Nov 12}{Fix wrong order of {\tt'author} and {\tt'editor}}
  68. % \changes{1.2}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles 
  69. %         as articles, not books}
  70. % \changes{1.3}{1994 Jul 1}{Change documentation to \LaTeXe}
  71. % \changes{1.3a}{1994 Sep 1}{Alter wording of article title capitalization
  72. %          choice}
  73. % \changes{1.4}{1994 Sep 5}{Add full author name possibilities}
  74. % \changes{1.4}{1994 Sep 5}{Fix up some punctuations}
  75. % \changes{1.4a}{1994 Sep 7}{Add possibility to put titles in quotes}
  76. % \changes{1.5}{1994 Sep 15}{Accommodate new \texttt{harvard.sty}}
  77. % \changes{1.5}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3}
  78. % \changes{1.5a}{1994 Oct 11}{Add option so year can contain any text}
  79. % \changes{1.5b}{1995 Jan 18}{Allow edited by to be in parentheses}
  80. % \changes{1.5b}{1995 Jan 18}{Allow (year) to have no punctuation following}
  81. % \changes{1.5c}{1995 Jan 20}{Journal volume numbers with more choice}
  82. % \changes{1.6}{1995 Feb 2}{Date with no punctuation preceding it}
  83. % \changes{1.6}{1995 Feb 2}{Editor names can be reversed like authors'}
  84. % \changes{1.6}{1995 Feb 2}{Can abbreviate `edited by' to `ed(s).'}
  85. % \changes{1.6}{1995 Feb 2}{Released version}
  86. % ^^A Change margins to center text
  87. % \setlength{\oddsidemargin}{0.5\paperwidth}
  88. % \addtolength{\oddsidemargin}{-0.5\textwidth}
  89. % \addtolength{\oddsidemargin}{-1in}
  90. % \setlength{\evensidemargin}{\oddsidemargin}
  91. % \pagestyle{myheadings}
  92. % \markboth{P. W. Daly}{Generic Bibliography Style}
  93. % \title{\bfseries A Generic Bibliographic Style File}
  94. %    
  95. % \author{Patrick W. Daly}
  96. %         
  97. % \GetFileInfo{genbst.mbs}
  98. % \date{This paper describes file \texttt{\filename},\\
  99. %  version \fileversion{} from \filedate}
  100. % \maketitle
  101. % \MakeShortVerb{\|}
  102. % \parskip=1ex \parindent=0pt
  103. % \newcommand{\btx}{\textsc{Bib}\TeX}
  104. % \newcommand{\dtx}{\textsf{docstrip}}
  105. % \section{Introduction}
  106. % This generic, or master, \btx{} style file is intended to be used with
  107. % \dtx{} in order to produce actual \texttt{.bst} files. By selecting
  108. % desired options, the output is customized to the particular requirements
  109. % needed.
  110. % The file has been assembled from Oren Patashnik's standard files
  111. % \texttt{plain.bst} and \texttt{unsrt.bst}, plus his non-standard file
  112. % \texttt{apalike.bst}. This last is an author-year citation style, although
  113. % somewhat imperfect. I have added a number of other options and codings to
  114. % produce the features that I deem necessary.
  115. % \section{About Master Bibliographic Style Files}
  116. % \subsection{The \dtx{} Options}
  117. % This master file is a \btx{} bibliographic style file containing
  118. % alternative coding depending on \dtx{} options. The options are
  119. % selected when \dtx{} is run, either interactively or through a
  120. % batch job. 
  121. % Suppose that one of the options is called \texttt{xyz}. Then the following
  122. % alternatives are possible:
  123. % \begin{quote}
  124. % |%<xyz> | \em one line of coding
  125. % \end{quote}
  126. % \emph{includes} the single line of coding;
  127. % \begin{quote}
  128. % |%<!xyz> | \em one line of coding 
  129. % \end{quote}
  130. % \emph{excludes} the single line;
  131. % \begin{quote}
  132. % |%<*xyz> | \\
  133. % \emph{several lines of coding}\\
  134. % |%</xyz> | 
  135. % \end{quote}
  136. % \emph{includes} all the bracketted lines;
  137. % \begin{quote}
  138. % |%<*!xyz> | \\
  139. % \emph{several lines of coding}\\
  140. % |%</!xyz> | 
  141. % \end{quote}
  142. % \emph{excludes} all the bracketted lines.
  143. % Options may be logically combined: the symbol \verb!|! is a logical
  144. % \textsf{or}, |&| a logical \textsf{and}, |!| a logical \textsf{not};
  145. % parentheses \texttt{(} and \texttt{)} may be used to group options.
  146. % \subsection{The \dtx{} Batch Job}
  147. % In order to generate a true \btx{} style file with selected options from
  148. % this master file, it is necessary to run a \dtx{} batch job.
  149. % Suppose that the master file is named \texttt{master.mbs}, and the
  150. % resulting \btx{} style file is to be \texttt{silly.bst}, and the batch job
  151. % file itself is called \texttt{silly.dbj}. To produce this with options, say,
  152. % \texttt{xyz} and \texttt{abc}, the batch job would look something like:
  153. % \begin{quote}\begin{verbatim}
  154. % \def\batchfile{silly.dbj}
  155. % \input docstrip
  156. % \preamble
  157. % This is for Journal of Silly Results
  158. % \endpreamble
  159. % \postamble
  160. % End of customized bst file
  161. % \endpostamble
  162. % \keepsilent
  163. % \generateFile{silly.bst}{f}{\from{master.mbs}{xyz,abc}}
  164. % \end{verbatim}
  165. % \end{quote}
  166. % A preamble is not necessary, although it is advisable to include some
  167. % statement about the application of the bibliographic style. A postamble
  168. % \emph{is} vital, otherwise the default will add |\endinput| at the end
  169. % of the file, something that \btx{} will not understand. The |\keepsilent|
  170. % is optional and just suppresses \dtx{} output during processing.
  171. % \subsection{The \texttt{makebst} Program}
  172. % The program \texttt{makebst} simplifies the creation of the batch job file. To
  173. % do that, it needs information on the available options. This information
  174. % must be stored in a special format, either in the master file itself, or
  175. % in a file with the same root name but extension \texttt{.opt}. The form of
  176. % this format is described in the documentation on \texttt{makebst}.
  177. % In the master file, this information must be enclosed within \dtx{}
  178. % options |%<*options>| \dots |%</options>| and \emph{must} include an
  179. % |\endoptions| command. It may also include any number of comments. 
  180. % A sample menu in the master file to select one or none of options 
  181. % \texttt{xyz} \emph{or} \texttt{zyx} would look thus:
  182. % \begin{quote}\begin{verbatim}
  183. % %<*options>
  184. % \mes{Select one of these}
  185. % \optdef{f}{xyz}{Option forword}{to do forward stuff}
  186. % \optdef{r}{zyx}{Option reverse}{to do reverse stuff}
  187. % \optdef{*}{}{None of the above}{}
  188. % \getans
  189. % \endoptions
  190. % %</options>
  191. % %<*!options>
  192. % . . . . . . 
  193. % %</!options>
  194. % \end{verbatim}
  195. % \end{quote}
  196. % An explanation of these commands is to be found in the documentation on 
  197. % \texttt{makebst}.
  198. % The menu information may be extracted from the master file by means of
  199. % \dtx{} and stored in a file with extension \texttt{.opt}. If this
  200. % file is missing, the program tries to read it from the master file.
  201. % \section{The Options}
  202. % Here I present a list of all the \dtx{} options that are
  203. % available (except for \texttt{options} itself). I have tried to avoid
  204. % conflicts with mutually exclusive options by always letting one dominate.
  205. % For example, if \texttt{a} and \texttt{b} are to be mutually exclusive, then
  206. % the three possibilities are:
  207. % \begin{quote}\begin{tabular}{rl}
  208. % neither &  \tt\%<!a\&!b> \\
  209. % \texttt{a} only & \tt\%<a> \\
  210. % \texttt{b} only & \tt\%<!a\&b>
  211. % \end{tabular}\end{quote}
  212. % so that if both \texttt{a} and \texttt{b} have been selected, the result is as
  213. % if only \texttt{a} had been given. (If one uses \texttt{makebst} to produce
  214. % the \dtx{} batch job, then it is impossible to give mutually exclusive
  215. % options.)
  216. % Most mutually exclusive options have the same prefix before the hyphen.
  217. % \newenvironment{opt}{%
  218. % \begin{list}{}{\labelwidth2cm \leftmargin2.5cm \labelsep1em \rightmargin0pt
  219. %  \def\makelabel##1{\ttfamily ##1 \hfill}}}{\end{list}}
  220. % \textbf{Citation style:} whether or not a numerical or author-year system 
  221. % is to be used.
  222. % \begin{opt}
  223. % \item[--] default is numerical, standard \LaTeX, as for {\tt
  224. %           plain.bst}.\\
  225. %           |\bibitem{key}...|
  226. % \item[cite] special for listing entire databases; the cite key is used 
  227. %             as the label so it may be listed.\\
  228. %             |\bibitem[key]{key}...|
  229. % \item[ay] for author-year style of citations. Various forms of |\bibitem|
  230. %           are provided under this option, to support different types
  231. %           of \LaTeX{} styles for interfacing with the author-year system.
  232. % \end{opt}
  233. % If \texttt{ay} has been selected, then the type of author-year interface
  234. % is selectable. Some of these, like \texttt{natbib} and \texttt{harvard}
  235. % exist in two versions because of updates in these systems. 
  236. % \begin{opt}
  237. % \item[--] default is the system I invented for my \texttt{natbib.sty}\\
  238. %            |\bibitem[author(year)]{key}...|   
  239. % \item[nat] for extended format of \texttt{natbib.sty} version 5.3\\
  240. %            |\bibitem[author(year)full author]{key}...|   
  241. % \item[alk] for the \texttt{apalike.sty} of Oren Patashnik and related
  242. %            systems\\
  243. %            |\bibitem[author, year]{key}...|
  244. % \item[har] for the Harvard family of styles (with \texttt{harvard.sty})\\
  245. %            |\harvarditem[short]{long}{year}{key}...|
  246. % \item[harnm] for the extended Harvard family, containing some extra commands
  247. %            used by \LaTeXe\ version 2.0.3 of \texttt{harvard.sty} 
  248. % \item[ast] for astronomy family of styles (with \texttt{astron.sty})\\
  249. %            |\bibitem[\protect\astroncite{author}{year}]{key}...|
  250. % \item[cay] for the Chicago family of styles (with \texttt{chicago.sty})\\
  251. %            |\bibitem[\protect\citeauthoryear{long}{short}{year}]{key}...|
  252. % \item[cn] for the ``author-date'' group of styles (with {\tt
  253. %            authordate1-4.sty})\\
  254. %            |\bibitem[\protect\citename{author, }year]{key}...|
  255. % \end{opt}
  256. % \textbf{Sequence:} the order in which the references are listed.
  257. % \begin{opt}
  258. % \item[--]      default is alphabetical by all authors, date, title
  259. % \item[seq-no]  (numerical only) sequence by citation order
  260. % \item[seq-lab] (author-year) by label, date, title (means that Daly 
  261. %                precedes Daly and Williams, precedes Daly et al.)
  262. % \end{opt}
  263. % \textbf{Names formatting:} how initials and surnames are to be combined.
  264. % \begin{opt}
  265. % \item[--]       default is full names, given names first
  266. % \item[nm-init]  initials plus surname
  267. % \item[nm-rev]   surname plus initials
  268. % \item[nm-rev1]  surname plus initials (1st name only) then initials 
  269. %                 plus surname
  270. % \item[nm-rv]    as \texttt{nm-rev}, but initials without dots
  271. % \item[ed-rev]  editors' names are reversed the same as authors'
  272. % \end{opt}
  273. % \textbf{Number of names:} normally all names listed (in reference list)
  274. % \begin{opt}
  275. % \item[nmlm]     limit number of names
  276. % \item[x1...x9]  (with \texttt{nmlm}) maximum number of names to appear
  277. % \item[m1...m5]  (with \texttt{nmlm}) minimum number before `et al' written;
  278. %                 no check for consistency is taken; one \texttt{x} and 
  279. %                 one \texttt{m} number must be given, and {\tt x}$\le${\tt m}
  280. % \end{opt}
  281. % \textbf{Names font:} in the reference list
  282. % \begin{opt}
  283. % \item[--]       default is names in normal type face
  284. % \item[nmft-sc]  names in small caps
  285. % \item[nmft-it]  names in italics   
  286. % \item[nmft-bf]  names in bold      
  287. % \end{opt}
  288. % \textbf{Block punctuation:} between logical sections (not mutually
  289. % exclusive)
  290. % \begin{opt}
  291. % \item[--]       default is period after each logical section, including end
  292. % \item[blk-com]  use commas, except at very end (changes `In' to `in')
  293. % \item[blk-tit]  use commas, except after a title and very end
  294. % \item[in-blk]   when commas used between blocks, starts sentence after
  295. %                 article title when followed by ``In: \dots''
  296. % \item[in-col]   puts a colon after `In' or `in' for edited works
  297. % \item[fin-bare] no punctuation at the very end
  298. % \end{opt}
  299. % \textbf{Date:} position and enclosure
  300. % \begin{opt}
  301. % \item[--]       default is date at end, before notes; for author-year,
  302. %                   date consists only of year, no month
  303. % \item[dt-beg]   date goes after authors' names 
  304. % \item[dt-end]   date goes after any notes
  305. % \item[yr-par]   no month, year in parentheses ()
  306. % \item[yr-brk]   no month, year in brackets []
  307. % \item[yr-col]   no month, year preceded by colon and space
  308. % \item[yr-per]   year preceded by period and space
  309. % \item[yr-blk]   year preceded by space
  310. % \item[note-yr]  permits text (like ``in press'') in the \texttt{year} field
  311. % \item[yrp-x]    suppresses punctuation following month, year when date
  312. %                 is just after authors
  313. % \end{opt}
  314. % \textbf{Article in journal:} style of title, volume, pages
  315. % \begin{opt}
  316. % \item[--]       default is: Title. \textit{Journal}, vol(num):p1--p2
  317. % \item[volp-sp]  as above, but with a space, vol(num):~p1--p2
  318. % \item[vol-bf]   volume in bold
  319. % \item[vol-it]   volume in italics
  320. % \item[vol-2bf]  volume and number bold
  321. % \item[volp-com] comma and space instead of colon:   vol(num), p1--p2
  322. % \item[vnum-x]   no number for journals, only volume
  323. % \item[vnum-s]   replace vol(num) with vol, num
  324. % \item[vnum-nr]  replace vol(num) with vol, no. num
  325. % \item[vnum-h]   replace vol(num) with vol, \#num
  326. % \item[jpg-1]    only starting page given
  327. % \item[jnm-x]    no punctuation after journal name
  328. % \item[tit-it]   article title in italics
  329. % \item[tit-q]    article title in single quotes
  330. % \item[tit-qq]   article title in double quotes
  331. % \item[jtit-x]   no article title (applies only to journals and 
  332. %                 collections)
  333. % \item[atit-u]   article title capitalized as in entry, default is
  334. %                 sentence capitalization (first word and words following
  335. %                 colons)
  336. % \end{opt}
  337. % \textbf{Thesis title:} formatted like a book or article
  338. % \begin{opt}
  339. % \item[--]       default is like a book title
  340. % \item[thtit-a]  titles of PhD and Master theses formatted like articles
  341. % \end{opt}
  342. % \textbf{Book title:} font style
  343. % \begin{opt}
  344. % \item[--]       default is italicized
  345. % \item[btit-rm]  book title plain
  346. % \end{opt}
  347. % \textbf{Abbreviations:} of various words, default is no abbreviations
  348. % \begin{opt}
  349. % \item[pp]       abbreviate `page(s)' as `p.' and `pp.'
  350. % \item[ed]       abbreviate `editor(s)' as `ed.' and `eds.'
  351. % \item[abr]      abbreviate `volume', `edition', `technical report', etc.
  352. % \end{opt}
  353. % \textbf{Editor:} alternative for \emph{in edited} work
  354. % \begin{opt}
  355. % \item[--]       in \emph{names}, editors, \emph{title}
  356. % \item[edby]     in \emph{title}, edited by \emph{names}
  357. % \item[edby-par] in \emph{title} (Edited by \emph{names})
  358. % \end{opt}
  359. % \textbf{Citation label:} what is written by the |\cite| command
  360. % \begin{opt}
  361. % \item[--]       default is no special font
  362. % \item[lab-it]   label (names printed by |\cite|) in italics
  363. % \item[xlab-it]  extra label (letter after year) in italics
  364. % \end{opt}
  365. % \textbf{Emphasis:} defines what `italicized' really means
  366. % \begin{opt}
  367. % \item[--]       default is |\em| (can switch between |\it| 
  368. %                 and |\rm|
  369. % \item[em-it]    use |\it| instead (always italic)
  370. % \item[em-x]     no emphasis
  371. % \end{opt}
  372. % \textbf{Special punctuation:} 
  373. % \begin{opt}
  374. % \item[amper]    use \& in place of `and'
  375. % \item[and-xcom] no comma before last `and' of an author list (citations and
  376. %                  references)
  377. % \item[and-com]  add comma before `and' even for two authors (in list of
  378. %                  references)
  379. % \item[xand]    no `and' in an author list (references)
  380. % \item[etal-it]  `et al.' in italics
  381. % \end{opt}
  382. % \textbf{Font commands:}
  383. % \begin{opt}
  384. % \item[--]     use \LaTeX~2.09 font commands
  385. % \item[nfss]   use |\textbf|, |\textit|, |\emph| in place of |\bf|, |\it|,
  386. %                and |\em|; only works then with \LaTeXe
  387. % \end{opt}
  388. % \section{The Menu Information}
  389. % Here I describe the options and menu information for this particular
  390. % master file \texttt{\filename}. To construct a \dtx{} driver file
  391. % to generate a desired \texttt{.bst} file, simply process \texttt{makebst.tex}
  392. % with \TeX\ or \LaTeX, and give 
  393. % \begin{quote}\tt\filename\end{quote}
  394. % when prompted for the name of the master file. Then answer the questions
  395. % in the menus that follow. The menu information is extracted from here.
  396. % All this menu information is nested between \dtx{} guard options
  397. % |%<*options>| \dots\ |%</options>|, and the last command is
  398. % |\endoptions|. The rest of the file is nested between |%<*!options>|
  399. % \dots\ |%</!options>| in order to exclude it if \dtx{} is used to
  400. % extract only the menu information.
  401. % \subsection*{Author-year or numerical}
  402. % The first question is whether a numerical or author-year citation style
  403. % is to be used. If the latter, the supporting system is my {\tt
  404. % natbib.sty}, which expects |\bibitem| to have an optional argument
  405. % containing the short form of the authors, plus year in parentheses.
  406. % E.g.,
  407. % \begin{quote}
  408. % |\bibitem[Daly et al.(1990)]{key}...|
  409. % \end{quote}
  410. % There is now a newer version of \texttt{natbib.sty} (v5.3) that
  411. % supports an optional full author list too, as
  412. % \begin{quote}
  413. % |\bibitem[Daly et al.(1990)Daly, Keppler, and Williams]{key}...|
  414. % \end{quote}
  415. % Other systems are also supported, such as the Harvard family of
  416. % bibliography styles (with \texttt{harvard.sty}), which have entries in the
  417. % form
  418. % \begin{quote}
  419. % |\harvarditem[Daly et al.]{Daly, Keppler,|\\
  420. % |       and Williams}{1990}{key}...|
  421. % \end{quote}
  422. % or the astronomy family (with \texttt{astron.sty}) with entries like
  423. % \begin{quote}
  424. % |\bibitem[\protect\astroncite{Daly et al.}{1990}]{key}...|
  425. % \end{quote}
  426. % or the Chicago family (with \texttt{chicago.sty}) with entries like
  427. % \begin{quote}
  428. % |\bibitem[\protect\citeautheryear{Daly, Keppler, and|\\
  429. % |      Williams}{Daly et al.}{1990}]{key}...|
  430. % \end{quote}
  431. % or the so-called ``author-date'' group (with \texttt{authordate1-4.sty})
  432. % with entries of the form
  433. % \begin{quote}
  434. % |\bibitem[\protect\citename{Daly et al.}1990]{key}...|
  435. % \end{quote}
  436. % Finally, there is the \texttt{apalike} format of Oren Patashnik, for use
  437. % with \texttt{apalike.sty} that has entries of the form
  438. % \begin{quote}
  439. % |\bibitem[Daly et al., 1990]{key}...|
  440. % \end{quote}
  441. % In addition to numerical or author-year citation styles, there is also a
  442. % \texttt{cite} style available in which the label is the same as the cite
  443. % key. This is for listing entire contents of databases with the cite key
  444. % visible. 
  445. % A flag |\ifnumerical| is established because some of the following menu
  446. % features depend on which system is to be used.
  447. %    \begin{macrocode}
  448. %<*options>
  449. \newif\ifnumerical \numericalfalse
  450. \newif\ifmytemp\mytempfalse
  451. \mes{^^JSTYLE OF CITATIONS:}
  452. \optdef{*}{}{Numerical}{as in standard LaTeX}
  453. \optdef{a}{ay}{Author-year}{with some non-standard interface}
  454. \optdef{c}{cite}{Cite key}{(special for listing contents of bib file)}
  455. \getans
  456. \numericaltrue
  457. \if\ans a\numericalfalse\fi
  458. \ifnumerical\else
  459. \mes{^^JAUTHOR-YEAR SUPPORT SYSTEM:}
  460. \optdef{*}{nat}{Natbib}{for use with natbib.sty v5.3}
  461. \optdef{n}{}{Older Natbib}{without full authors citations}
  462. \optdef{l}{alk}{Apalike}{for use with apalike.sty}
  463. \optdef{h}{har}{Harvard}{system with harvard.sty}
  464. \optdef{a}{ast}{Astronomy}{system with astron.sty}
  465. \optdef{c}{cay}{Chicago}{system with chicago.sty}
  466. \optdef{d}{cn}{Author-date}{system with authordate1-4.sty}
  467. \getans
  468. %    \end{macrocode}
  469. % The \texttt{harvard} family has been extended for \LaTeXe, and the new
  470. % \texttt{.bst} files allow the word `and' and the brackets around years
  471. % to be variable with commands. A URL entry is added, for the on-line
  472. % network reference. These features may be added too.
  473. %    \begin{macrocode}
  474. \if\ans h%
  475. \mes{^^JHARVARD EXTENSIONS INCLUDED:}
  476. \optdef{*}{harnm}{With Harvard extensions}{for LaTeX2e version of harvard.sty}
  477. \optdef{n}{}{Older Harvard}{style, for LaTeX 2.09}
  478. \getans\fi
  479. %    \end{macrocode}
  480. % \subsection*{Ordering of the listed references}
  481. %   Choices here depend on citation style. The default in both cases is
  482. % alphabetical order of all authors. For numerical style, one may also
  483. % choose an unsorted order, which means the order the same as the original
  484. % citations. This corresponds to \texttt{unsrt.bst}.
  485. % For author-year, the second choice is by label. (The label is the
  486. % optional |\bibitem| argument, and is what is printed in place of the
  487. % |\cite| command.) With this option, all the papers with the same first
  488. % author are ordered so that the one-author papers come first, followed by
  489. % the two-author papers, followed by the multiple-author papers. This is a
  490. % more sensible system for author-year citations, and is demanded by some
  491. % journals (like JGR).
  492. %    \begin{macrocode}
  493. \ifnumerical
  494. \mes{^^JORDERING OF REFERENCES:}
  495. \optdef{*}{}{Alphabetical}{by all authors}
  496. \optdef{c}{seq-no}{Citation order}{(unsorted, like unsrt.bst)}
  497. \getans
  498. \else
  499. \mes{^^JORDERING OF REFERENCES:}
  500. \optdef{*}{}{Alphabetical}{by all authors}
  501. \optdef{l}{seq-lab}{By label}%
  502.    {(Jones before Jones and James before Jones et al)}
  503. \getans
  504. %    \end{macrocode}
  505. % \subsection*{Formatting author names}
  506. % The default is that the full names of the authors are listed, given names
  507. % first, unabbreviated. Of course, if only the initials have been given in
  508. % the \texttt{.bib} file, then that is all that can appear in the list. Other
  509. % possibilities are to use initials (even if full names in the \texttt{.bib}
  510. % file) either before or after the surnames. A specialty of the journals of
  511. % the American Geophysical Union is to have only the first name with
  512. % reversed initials.
  513. % If the reference is part of a larger work with editors, then the editor
  514. % names appear later in the reference text, usually as ``edited by \dots''
  515. % or as ``\emph{names} (editors)''. In these cases, the editor names are 
  516. % not usually reversed (surname first) even if the authors' names are.
  517. % An option is provided to format such editor names exactly as the authors'.
  518. %    \begin{macrocode}
  519. \mes{^^JAUTHOR NAMES:}
  520. \optdef{*}{}{Full, surname last}{(John Frederick Smith)}
  521. \optdef{i}{nm-init}{Initials + surname}{(J. J. Smith)}
  522. \optdef{r}{nm-rev}{Surname + initials}{(Smith, J. J.)}
  523. \optdef{s}{nm-rv}{Surname + dotless initials}{(Smith J J)}
  524. \optdef{a}{nm-rev1}{Only first name reversed}%
  525.    {(AGU style: Smith, J. J., H. K. Jones)}
  526. \getans
  527. \mytempfalse
  528. \if\ans r\mytemptrue\fi
  529. \if\ans s\mytemptrue\fi
  530. \if\ans a\mytemptrue\fi
  531. \ifmytemp
  532. \mes{^^JEDITOR NAMES IN COLLECTIONS:}
  533. \if\ans r
  534. \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith}
  535. \if\ans s
  536. \optdef{*}{}{Editor names NOT reversed}{as edited by J J Smith}
  537. \if\ans a
  538. \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith}
  539. \optdef{r}{ed-rev}{Editor names reversed}{just like authors'}
  540. \getans
  541. %    \end{macrocode}
  542. % \subsection*{Number of authors}
  543. % Normally the complete list of authors as given in the \texttt{.bib} file are
  544. % presented in the reference list. However, some journals prefer to limit
  545. % them to a maximum. If there are more than this maximum number of author
  546. % names, then a minimum number plus `et al.' are listed.
  547. % Because no test for consistency of the numbers is carried out in the
  548. % \texttt{.bst} file itself (it might be possible, but I found it too complex),
  549. % this is done here.
  550. %    \begin{macrocode}
  551. \mes{^^JNUMBER OF AUTHORS:}
  552. \optdef{*}{}{All authors}{included in listing}
  553. \optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)}
  554. \getans
  555. \if\ans l
  556. \loop
  557.   \ask{\num}{Maximum number of authors (1-9)}
  558.   \ifnum\num>9
  559.   \mes{*** Must be between 1 and 9}
  560. \repeat
  561. \wr{\spsp\spsp\sep x\num\pc: Maximum of \num\space authors}
  562. \mes{\spsp You have selected maximum \num\space authors}
  563. \ifnum\num>5\def\numx{5}\else\edef\numx{\num}\fi
  564. \loop
  565.   \ask{\num}{Minimum number (before et al given) (1-\numx)}
  566.   \ifnum\num>\numx
  567.   \mes{*** Must be between 1 and \numx}
  568. \repeat
  569. \wr{\spsp\spsp\sep m\num\pc: Minimum of \num\space authors}
  570. \mes{\spsp You have selected minimum \num\space authors}
  571. %    \end{macrocode}
  572. % \subsection*{Type face of names}
  573. % The author names in the list of references normally appear in the current
  574. % type face. This may be changed to small caps, bold, or italics.
  575. %    \begin{macrocode}
  576. \mes{^^JTYPEFACE FOR AUTHORS:}
  577. \optdef{*}{}{Normal font for authors}{}
  578. \optdef{s}{nmft-sc}{Small caps authors}{(\string\sc)}
  579. \optdef{i}{nmft-it}{Italic authors}{(\string\it\space or \string\em)}
  580. \optdef{b}{nmft-bf}{Bold authors}{(\string\bf)}
  581. \getans
  582. %    \end{macrocode}
  583. % \subsection*{Position of date}
  584. % This applies to author-year style only. It makes sense to put the date
  585. % immediately after the author list, since the two items (author and year)
  586. % are the identifiers of the reference. Default position is at the
  587. % end of the references, before any notes. It is also possible to place
  588. % it even after the notes.
  589. %    \begin{macrocode}
  590. \mes{^^JDATE POSITION:}
  591. \optdef{*}{}{Date at end}{}
  592. \optdef{b}{dt-beg}{Date after authors}{}
  593. \optdef{e}{dt-end}{Date at very end}{after any notes}
  594. \getans
  595. \if\ans b\mytemptrue\else\mytempfalse\fi
  596. %    \end{macrocode}
  597. % \subsection*{Format of date}
  598. % The year may be enclosed in parentheses, brackets, or preceded by a
  599. % colon. If none of these are selected, the date (month plus year) appears. 
  600. % For author-year, the date always consists only of the year, no month.
  601. % If the date is to go inside parentheses or brackets, and it is just after
  602. % the authors, then one might want to suppress the following punctuation.
  603. %    \begin{macrocode}
  604. \ifnumerical
  605. \mes{^^JDATE FORMAT:}
  606. \optdef{*}{}{Month and year}{without any brackets}
  607. \optdef{p}{yr-par}{Date in parentheses}{as (May 1993)}
  608. \optdef{b}{yr-brk}{Date in brackets}{as [May 1993]}
  609. \optdef{c}{yr-col}{Date preceded by colon}{as `: May 1993'}
  610. \optdef{d}{yr-per}{Date preceded by period}{as `. May 1993'}
  611. \optdef{s}{yr-blk}{Date preceded by space}{only, as ` May 1993'}
  612. \else
  613. \mes{^^JDATE FORMAT:^^J(no months for author-year)}
  614. \optdef{*}{}{Year plain}{without any brackets}
  615. \optdef{p}{yr-par}{Year in parentheses}{as (1993)}
  616. \optdef{b}{yr-brk}{Year in brackets}{as [1993]}
  617. \optdef{c}{yr-col}{Year preceded by colon}{as `: 1993'}
  618. \optdef{d}{yr-per}{Year preceded by period}{as `. 1993'}
  619. \optdef{s}{yr-blk}{Year preceded by space}{only, as ` 1993'}
  620. \getans
  621. \if\ans p\else\if\ans b\else\mytempfalse\fi\fi
  622. \ifmytemp
  623. \mes{^^JDATE PUNCTUATION:}
  624. \optdef{*}{}{Date with punctuation}{(comma or period)}
  625. \optdef{x}{yrp-x}{No punct. after date}{}
  626. \getans
  627. %    \end{macrocode}
  628. % Normally in author-year citations, the \texttt{year} entry is truncated
  629. % to the last 4 characters, which should be the 4 digits of the year. Some
  630. % users have requested the possibility of suppressing this truncation so
  631. % that they may put text in the \texttt{year} field, such as ``in press.''
  632. %    \begin{macrocode}
  633. \ifnumerical\else
  634. \mes{^^JTRUNCATE YEAR:}
  635. \optdef{*}{}{Year truncated}{to last 4 digits}
  636. \optdef{t}{note-yr}{Year text full}{to allow text in place of digits}
  637. \getans
  638. %    \end{macrocode}
  639. % \subsection*{Article title in journal}
  640. % The title of an article in a journal or in a collection (a book, or
  641. % conference proceedings) may appear plain, in italics, within single
  642. % or double quotes. 
  643. % Furthermore, it may have sentence capitalization (first
  644. % word and word following colon) or be capitalized as in the \texttt{.bib} file
  645. % entry. That is why it is recommended to capitalize the entry text as it
  646. % should appear when fully capitalized, putting words that are always
  647. % capitalized in braces. Example:
  648. % \begin{quote}
  649. % |TITLE="The Results of the {Giotto} Mission"|
  650. % \end{quote}
  651. % which produces either ``The results of the Giotto mission'' or ``The
  652. % Results of the Giotto Mission'', depending on option.
  653. % Additionally, the article titles may be fully suppressed.
  654. %    \begin{macrocode}
  655. \mes{^^JTITLE OF ARTICLE:}
  656. \optdef{*}{}{Title plain}{with no special font}
  657. \optdef{i}{tit-it}{Title italic}{(\string\em)}
  658. \optdef{q}{tit-q}{Title in single quotes}{(`Title')}
  659. \optdef{d}{tit-qq}{Title in double quotes}{(``Title'')}
  660. \getans
  661. \mes{^^JCAPITALIZATION OF ARTICLE TITLE:}
  662. \optdef{*}{}{Sentence style}{(first word and those in braces)}
  663. \optdef{t}{atit-u}{Title style}{(just as in bib entry)}
  664. \getans
  665. \mes{^^JARTICLE TITLE PRESENT:}
  666. \optdef{*}{}{Article title present}{in journals and proceedings}
  667. \optdef{x}{jtit-x}{No article title}{}
  668. \getans
  669. %    \end{macrocode}
  670. % \subsection*{Title of Theses}
  671. % The title of a these (PhD or Master's) is normally treated the same
  672. % as that of a book. Optionally, it may be formatted like that of 
  673. % an article.
  674. %    \begin{macrocode}
  675. \mes{^^JTHESIS TITLE:}
  676. \optdef{*}{}{Thesis titles like books}{}
  677. \optdef{a}{thtit-a}{Thesis title like article}{}
  678. \getans
  679. %    \end{macrocode}
  680. % \subsection*{Journal reference}
  681. % Great diversity of opinion exists as to how a journal reference is to be
  682. % formatted. It consists of a volume, possibly a number, and page limits.
  683. % The number is really only necessary if the page numbers within one volume
  684. % start at 1 for each physical `number'. Since journals are often bound
  685. % together in one volume later, it makes more sense to number the pages
  686. % continuously through the whole volume. However, this is not always so,
  687. % and then the `number' is necessary for the full specification.
  688. % A number of styles for journal specifications are
  689. % \begin{quote}
  690. % 21(2):33--55\\
  691. % \textbf{21}(2):33--55\\
  692. % \textit{21}(2), 33--55
  693. % \end{quote}
  694. % Here both start and stop page numbers have been given; often only the
  695. % start page is wanted.
  696. %    \begin{macrocode}
  697. \mes{^^JJOURNAL VOLUME NUMBER:}
  698. \optdef{*}{}{Volume plain}{as vol(num)}
  699. \optdef{i}{vol-it}{Volume italic}{as {\string\em\space vol}(num)}
  700. \optdef{b}{vol-bf}{Volume bold}{as {\string\bf\space vol}(num)}
  701. \optdef{d}{vol-2bf}{Volume and number bold}{as {\string\bf\space vol(num)}}
  702. \getans
  703. %    \end{macrocode}
  704. % The form of the `number' is also given: in parentheses, with `no.', 
  705. % with \#, or omitted.
  706. %    \begin{macrocode}
  707. \mes{^^JJOURNAL VOL AND NUMBER:}
  708. \optdef{*}{}{Journal vol(num)}{as 34(2)}
  709. \optdef{n}{vnum-nr}{Journal vol, no. num}{as 34, no. 2}
  710. \optdef{h}{vnum-h}{Journal vol, \string\# number}{as 34, \string\#2}
  711. \optdef{s}{vnum-s}{Journal vol, num}{as 34, 2}
  712. \optdef{x}{vnum-x}{Journal vol, no number}{as 34}
  713. \getans
  714. %    \end{macrocode}
  715. % It is possible to decide whether the journal name should be
  716. % separated from the following specifications with a blank or comma.
  717. %    \begin{macrocode}
  718. \mes{^^JVOLUME PUNCTUATION:}
  719. \optdef{*}{}{Volume with colon}{as vol(num):ppp}
  720. \optdef{s}{volp-sp}{Volume with colon and space}{as vol(num): ppp}
  721. \optdef{c}{volp-com}{Volume with comma}{as vol(num), ppp}
  722. \getans
  723. \mes{^^JPAGE NUMBERS:}
  724. \optdef{*}{}{Start and stop page numbers}{given}
  725. \optdef{f}{jpg-1}{Only start page number}{}
  726. \getans
  727. \mes{^^JJOURNAL NAME PUNCTUATION:}
  728. \optdef{*}{}{Comma after journal}{name}
  729. \optdef{x}{jnm-x}{Space after journal}{name}
  730. \getans
  731. %    \end{macrocode}
  732. % \subsection*{Book title}
  733. % The title of a book (as opposed to an article in a book or journal) is
  734. % normally italicized. This may be set to the regular font.
  735. %    \begin{macrocode}
  736. \mes{^^JBOOK TITLE:}
  737. \optdef{*}{}{Book title italic}{(\string\em)}
  738. \optdef{p}{btit-rm}{Book title plain}{(no font command)}
  739. \getans
  740. %    \end{macrocode}
  741. % \subsection*{Edited by}
  742. % For an article within an edited collection, the normal form is 
  743. % \begin{quote}
  744. % In J. K. James, editor, \emph{Title of Collection} \dots
  745. % \end{quote}
  746. % An alternative is the form
  747. % \begin{quote}
  748. % In \emph{Title of Collection}, edited by J. K. James \dots
  749. % \end{quote}
  750. %    \begin{macrocode}
  751. \mes{^^JEDITOR STYLE:}
  752. \optdef{*}{}{Word `editor'}{after name of editor}
  753. \optdef{b}{edby}{`Edited by'}{before name of editor}
  754. \optdef{p}{edby-par}{`(Edited by..)'}{editor(s) in parentheses}
  755. \getans
  756. %    \end{macrocode}
  757. % \subsection*{Block punctuation}
  758. % Blocks are logical sections of the reference specification, such as the
  759. % author block, the journal block, editor block, etc. These are normally
  760. % separated by periods, but alternatively a comma may be used. Another
  761. % choice is to use commas except after titles where a period is given.
  762. % In this case, one might also want the title of a work in a collection
  763. % to be followed by a period.
  764. %    \begin{macrocode}
  765. \mes{^^JPUNCTUATION BETWEEN SECTIONS (BLOCKS):}
  766. \optdef{*}{}{Period after blocks}{of authors, title, etc}
  767. \optdef{c}{blk-com}{Comma after blocks}{}
  768. \optdef{t}{blk-tit}{Only titles with period}{but other blocks commas}
  769. \getans
  770. \mytempfalse
  771. \if\ans c\mytemptrue\fi
  772. \if\ans t\mytemptrue\fi
  773. \ifmytemp
  774. \mes{^^JPUNCTUATION AFTER TITLE OF INCOLLECTION:}
  775. \optdef{*}{}{Comma after title in collection}{as Title, in:...}
  776. \optdef{p}{in-blk}{Period after title in collection}{as Title. In:...}
  777. \getans
  778. %    \end{macrocode}
  779. % \subsection*{`In' with colon}
  780. % When referring to works in a collection, one begins the block describing
  781. % that collection with `In'. Optionally, one may add a colon.
  782. %    \begin{macrocode}
  783. \mes{^^JPUNCTUATION AFTER `IN':}
  784. \optdef{*}{}{Space after `in'}{for editted works or proceedings}
  785. \optdef{c}{in-col}{Colon after `in'}{(as `In: ...')}
  786. \getans
  787. %    \end{macrocode}
  788. % \subsection*{Final punctuation}
  789. % The punctuation at the end of the reference is normally a period. This
  790. % may be suppressed.
  791. %    \begin{macrocode}
  792. \mes{^^JFINAL PUNCTUATION:}
  793. \optdef{*}{}{Period at very end}{of the listed reference}
  794. \optdef{x}{fin-bare}{No period at end}{}
  795. \getans
  796. %    \end{macrocode}
  797. % \subsection*{Abbreviations}
  798. % A number of words may be abbreviated: pages, editors, volume, chapter,
  799. % and so on. The first two may be independently set to abbreviation, the
  800. % rest with a single option.
  801. %    \begin{macrocode}
  802. \mes{^^JABBREVIATE WORD `PAGES':}
  803. \optdef{*}{}{`Page(s)'}{(no abbreviation)}
  804. \optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}
  805. \getans
  806. \mes{^^JABBREVIATE WORD `EDITORS':}
  807. \optdef{*}{}{`Editor(s)'}{(no abbreviation)}
  808. \optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.}
  809. \getans
  810. \mes{^^JOTHER ABBREVIATIONS:}
  811. \optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc}
  812. \optdef{a}{abr}{Abbreviations}{of such words}
  813. \getans
  814. %    \end{macrocode}
  815. % \subsection*{Citation label}
  816. % This applies to author-year style only. The label is the text written
  817. % by the |\cite| command, and for author-year style, this is something like
  818. % `Daly et al.\ (1990b)'. One may select italics for the authors and for the
  819. % extra label attached to the year. The year always remains plain.
  820. % It is not possible to select the type of brackets for the year, since
  821. % this is determined by the \LaTeX{} style option that manages the
  822. % author-year citations. This is not standard \LaTeX, so that there are a
  823. % number of private style files for achieving this.
  824. %    \begin{macrocode}
  825. \ifnumerical\else
  826. \mes{^^JFONT OF CITATION LABEL:}
  827. \optdef{*}{}{Cited authors plain}{as result of \string\cite\space command}
  828. \optdef{i}{lab-it}{Cited authors italic}{}
  829. \getans
  830. \mes{^^JFONT OF EXTRA LABEL:^^J(The extra letter on the year)}
  831. \optdef{*}{}{Extra label plain}{}
  832. \optdef{i}{xlab-it}{Extra label italic}{}
  833. \getans
  834. %    \end{macrocode}
  835. % \subsection*{Variations on `and'}
  836. % It is possible to replace the word `and' with an ampersand \&, and to
  837. % specify whether a comma is to precede `and' in a list of more than two
  838. % names.
  839. %    \begin{macrocode}
  840. \mes{^^JAMPERSAND:}
  841. \optdef{*}{}{Use word `and'}{in author lists}
  842. \optdef{a}{amper}{Use ampersand}{in place of `and'}
  843. \getans
  844. \mes{^^JCOMMA BEFORE `AND':}
  845. \optdef{*}{}{Comma before `and'}{as `Tom, Dick, and Harry'}
  846. \optdef{n}{and-xcom}{No comma before `and'}{as `Tom, Dick and Harry'}
  847. \optdef{c}{and-com}{Comma with 2 authors}{as `Tom, and Harry'}
  848. \getans
  849. \mes{^^JNO `AND' IN REFERENCE LIST:}
  850. \optdef{*}{}{With `and'}{before last author in reference list}
  851. \optdef{x}{xand}{No `and'}{as `Tom, Dick, Harry'}
  852. \getans
  853. %    \end{macrocode}
  854. % \subsection*{Font of `et al'}
  855. % One can chose that `et al.'\ be put into italics.
  856. %    \begin{macrocode}
  857. \mes{^^JFONT OF `ET AL':}
  858. \optdef{*}{}{Plain et al}{}
  859. \optdef{i}{etal-it}{Italic et al}{}
  860. \getans
  861. %    \end{macrocode}
  862. % \subsection*{Define emphasis}
  863. % In everything that been mentioned so far, italicization should be
  864. % understood to mean `emphasize' in the \LaTeX{} sense. This means that the
  865. % command |\em| is used. This is not the same as |\it|, which is always
  866. % italics. Rather, with |\em|, the font style switches between |\rm| and
  867. % |\it| depending on the context. Here one may choose to true italics, or
  868. % to switch off italics altogether.
  869. %    \begin{macrocode}
  870. \mes{^^JEMPHASIS:^^J(affects all so-called italics)}
  871. \optdef{*}{}{Use emphasis}{ie, \string\em, allows font switching}
  872. \optdef{i}{em-it}{Use true italics}{ie, \string\it, absolute italics}
  873. \optdef{x}{em-x}{No italics}{at all}
  874. \getans
  875. %    \end{macrocode}
  876. % \subsection*{New Font Selection Scheme}
  877. % Bold face, italics, and emphasis are made with the \LaTeX~2.09 commands.
  878. % This makes them compatible with \LaTeXe{} as well, but it is possible that
  879. % in future they might die out. Also, they might not be provided with
  880. % future classes. Allow an option to use the New Font Selection Scheme (NFSS)
  881. % font commands in \LaTeXe. If this option is taken, then the \texttt{.bst}
  882. % file may only be used with \LaTeXe.
  883. %    \begin{macrocode}
  884. \mes{^^JNEW FONT SELECTION SCHEME:}
  885. \optdef{*}{}{No NFSS}{use 2.09 font commands}
  886. \optdef{n}{nfss}{NFSS}{use \string\textbf, \string\emph, not \string\bf,
  887.                        \string\em}
  888. \getans
  889. \endoptions
  890. %</options>
  891. %    \end{macrocode}
  892. % \StopEventually{\PrintChanges
  893. %    \end{document}}
  894. % \section{The Bibliographic Coding}
  895. %    \begin{macrocode}
  896. %<*!options>
  897. %%---------------------------------------------------------------------
  898. %<*ay>
  899.  % This is an author-year citation style bibliography. As such, it is 
  900.  % non-standard LaTeX, and requires a special package file to function properly.
  901.  % Such a package is    natbib.sty   by Patrick W. Daly
  902. %<*alk>
  903.  % or:                  apalike.sty  by Oren Patashnik
  904.  % The form of the \bibitem entries is
  905.  %   \bibitem[Jones et al., 1990]{key}...
  906. %</alk>
  907. %<*!(har|ast|alk|cay|cn)>
  908.  % The form of the \bibitem entries is
  909.  %   \bibitem[Jones et al.(1990)]{key}...
  910. %<nat> %   \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
  911.  % The essential feature is that the label (the part in brackets) consists
  912.  % of the author names, as they should appear in the citation, with the year
  913.  % in parentheses following. There must be no space before the opening
  914.  % parenthesis!
  915. %<nat> % With natbib v5.3, a full list of authors may also follow the year.
  916.  % In natbib.sty, it is possible to define the type of enclosures that is
  917.  % really wanted (brackets or parentheses), but in either case, there must
  918.  % be parentheses in the label.
  919.  % The \cite command functions as follows:
  920.  %   \cite{key} ==>>                Jones et al. (1990)
  921.  %   \cite[]{key} ==>>              (Jones et al., 1990)
  922.  %   \cite[chap. 2]{key} ==>>       (Jones et al., 1990, chap. 2)
  923.  %   \cite[e.g.][]{key} ==>>        (e.g. Jones et al., 1990)
  924.  %   \cite[e.g.][p. 32]{key} ==>>   (e.g. Jones et al., p. 32)
  925.  %   \citeauthor{key}               Jones et al.
  926. %<nat> %   \citefullauthor{key}           Jones, Baker, and Smith
  927.  %   \citeyear{key}                 1990
  928. %</!(har|ast|alk|cay|cn)>
  929. %<*har>
  930.  % or:                  harvard.sty  by Peter Williams and Thorsten Schnier
  931. %<harnm> % (needs natbib v5.3  or  harvard v2.0.3)
  932.  % The form of the bibitem entries is
  933.  %   \harvarditem[Jones et al.]{Jones, Baker, and Smith}{1990}{key}...
  934. %</har>
  935. %<*cay>
  936.  % or:                  chicago.sty 
  937.  % The form of the bibitem entries is
  938.  %   \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith}
  939.  %        {Jones et al.}{1990}{key}...
  940. %</cay>
  941. %<*ast>
  942.  % or:                  astron.sty 
  943.  % The form of the bibitem entries is
  944.  %   \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}...
  945. %</ast>
  946. %<*cn>
  947.  % or:                  authordate1-4.sty
  948.  % The form of the bibitem entries is
  949.  %   \bibitem[\protect\citename{Jones et al.}1990]{key}...
  950. %</cn>
  951. %</ay>
  952. %<*!ay>
  953.  % This is a numerical citation style, and as such is standard LaTeX.
  954.  % It requires no extra package to interface to the main text.
  955.  % The form of the \bibitem entries is 
  956.  %   \bibitem{key}...
  957.  % Usage of \cite is as follows:
  958.  %   \cite{key} ==>>          [#]
  959.  %   \cite[chap. 2]{key} ==>> [#, chap. 2]
  960.  % where # is a number determined by the ordering in the reference list.
  961. %<*seq-no> 
  962.  % This is the order in which the works were originally cited in the text.
  963. %</seq-no> 
  964. %<*!seq-no> 
  965.  % This is alphabetical by authors.
  966. %</!seq-no> 
  967. %</!ay>
  968. %<*!ay&cite>
  969.  % This is a special pseudo-numerical bibliography style. The form of 
  970.  % the \bibitem entries is
  971.  %   \bibitem[key]{key}...
  972.  % It is intended to be used to list all the entries in a bib database
  973. %</!ay&cite>
  974. %%---------------------------------------------------------------------
  975. %    \end{macrocode}
  976. % \changes{1.5}{1994 Sep 16}{Add URL entry type for \texttt{harnm} option}
  977. %  The new \texttt{harvard.sty} of \LaTeXe{} includes an entry URL, or
  978. %  rather it is included in the new \texttt{.bst} files for it. Add it 
  979. %  here too, but only for option \texttt{harnm}.
  980. %    \begin{macrocode}
  981. ENTRY
  982.   { address
  983.     author
  984.     booktitle
  985.     chapter
  986.     edition
  987.     editor
  988.     howpublished
  989.     institution
  990.     journal
  991.     key
  992.     month
  993.     note
  994.     number
  995.     organization
  996.     pages
  997.     publisher
  998.     school
  999.     series
  1000.     title
  1001.     type
  1002. %<harnm>    URL
  1003.     volume
  1004.     year
  1005. %<!ay>  { label }
  1006. %<ay>  { label extra.label sort.label }
  1007. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  1008. FUNCTION {init.state.consts}
  1009. { #0 'before.all :=
  1010.   #1 'mid.sentence :=
  1011.   #2 'after.sentence :=
  1012.   #3 'after.block :=
  1013. STRINGS { s t }
  1014. FUNCTION {output.nonnull}
  1015. { 's :=
  1016.   output.state mid.sentence =
  1017.     { ", " * write$ }
  1018.     { output.state after.block =
  1019.         { add.period$ write$
  1020.           newline$
  1021.           "\newblock " write$
  1022.         }
  1023.         { output.state before.all =
  1024.             'write$
  1025.             { add.period$ " " * write$ }
  1026.           if$
  1027.         }
  1028.       if$
  1029.       mid.sentence 'output.state :=
  1030.     }
  1031.   if$
  1032. FUNCTION {output}
  1033. { duplicate$ empty$
  1034.     'pop$
  1035.     'output.nonnull
  1036.   if$
  1037. FUNCTION {output.check}
  1038. { 't :=
  1039.   duplicate$ empty$
  1040.     { pop$ "empty " t * " in " * cite$ * warning$ }
  1041.     'output.nonnull
  1042.   if$
  1043. FUNCTION {fin.entry}
  1044. %<*!fin-bare>
  1045. { add.period$
  1046.   write$
  1047. %</!fin-bare>
  1048. %<*fin-bare>
  1049. { duplicate$ empty$   
  1050.     'pop$
  1051.     'write$
  1052.   if$
  1053. %</fin-bare>
  1054.   newline$
  1055. FUNCTION {new.block}
  1056. { output.state before.all =
  1057.     'skip$
  1058.     { after.block 'output.state := }
  1059.   if$
  1060. FUNCTION {new.sentence}
  1061. { output.state after.block =
  1062.     'skip$
  1063.     { output.state before.all =
  1064.         'skip$
  1065.         { after.sentence 'output.state := }
  1066.       if$
  1067.     }
  1068.   if$
  1069. FUNCTION {add.blank}
  1070. { " " * before.all 'output.state :=
  1071. FUNCTION {not}
  1072. {   { #0 }
  1073.     { #1 }
  1074.   if$
  1075. FUNCTION {and}
  1076. {   'skip$
  1077.     { pop$ #0 }
  1078.   if$
  1079. FUNCTION {or}
  1080. {   { pop$ #1 }
  1081.     'skip$
  1082.   if$
  1083. %    \end{macrocode}
  1084. % \changes{1.4a}{1994 Sep 8}{Add \texttt{non.stop} to test if last character
  1085. %   is punctuation: . ! ?}
  1086. %    \begin{macrocode}
  1087. FUNCTION {non.stop}
  1088. { duplicate$ 
  1089.    "}" * add.period$ 
  1090.    #-1 #1 substring$ "." =
  1091. %<*!ay>
  1092. FUNCTION {new.block.checka}
  1093. { empty$
  1094.     'skip$
  1095.     'new.block
  1096.   if$
  1097. %</!ay>
  1098. FUNCTION {new.block.checkb}
  1099. { empty$
  1100.   swap$ empty$
  1101.   and
  1102.     'skip$
  1103.     'new.block
  1104.   if$
  1105. %<*!ay>
  1106. FUNCTION {new.sentence.checka}
  1107. { empty$
  1108.     'skip$
  1109.     'new.sentence
  1110.   if$
  1111. FUNCTION {new.sentence.checkb}
  1112. { empty$
  1113.   swap$ empty$
  1114.   and
  1115.     'skip$
  1116.     'new.sentence
  1117.   if$
  1118. %</!ay>
  1119. FUNCTION {field.or.null}
  1120. { duplicate$ empty$
  1121.     { pop$ "" }
  1122.     'skip$
  1123.   if$
  1124. %    \end{macrocode}
  1125. %\changes{1.3}{1994 Jul 1}{Add \texttt{nfss} option}
  1126. % \changes{1.4a}{1994 Sep 8}{Add italic correction to \texttt{emphasize}
  1127. %   using new \texttt{non.stop} test}
  1128. %    \begin{macrocode}
  1129. FUNCTION {emphasize}
  1130. %<*!em-x>
  1131. { duplicate$ empty$
  1132.     { pop$ "" }
  1133. %<*!nfss>
  1134. %<!em-it>    { "{\em " swap$ * non.stop
  1135. %<em-it>    { "{\it " swap$ * non.stop
  1136.         { "\/}" * } 
  1137.         { "}" * }
  1138.       if$
  1139.     }
  1140. %</!nfss>
  1141. %<*nfss>
  1142. %<!em-it>    { "\emph{" swap$ * "}" * }
  1143. %<em-it>    { "\textit{" swap$ * "}" * }
  1144. %</nfss>
  1145.   if$
  1146. %</!em-x>
  1147. %<em-x>{ skip$ }
  1148. %<*nmft-bf|vol-bf|vol-2bf>
  1149. FUNCTION {bolden}
  1150. { duplicate$ empty$
  1151.     { pop$ "" }
  1152. %<!nfss>    { "{\bf " swap$ * "}" * }
  1153. %<nfss>    { "\textbf{" swap$ * "}" * }
  1154.   if$
  1155. %</nmft-bf|vol-bf|vol-2bf>
  1156. %    \end{macrocode}
  1157. % \changes{1.5}{1994 Sep 16}{Add \texttt{write.url} for option \texttt{harnm}}
  1158. % This function taken over from \texttt{agsm.sty}, the main \texttt{harvard}
  1159. % bib style.
  1160. %    \begin{macrocode}
  1161. %<*harnm>
  1162. FUNCTION {write.url}
  1163. { URL empty$
  1164.     { skip$ }
  1165.     { "\newline\harvardurl{" URL * "}" * write$ newline$ }
  1166.   if$
  1167. %</harnm>
  1168. INTEGERS { nameptr namesleft numnames }
  1169. %    \end{macrocode}
  1170. % \changes{1.5}{1994 Sep 16}{Add \texttt{harvard} command for `and' with
  1171. %    new option \texttt{harnm}}
  1172. % The \texttt{harvard} package now (version 2.0.3, for \LaTeXe) uses 
  1173. % |\harvardand| in place of the word `and' so that it can be changed
  1174. % at run time. This is allowed for with the option \texttt{harnm}, which
  1175. % need not be used only with the \texttt{har} option.
  1176. %    \begin{macrocode}
  1177. FUNCTION {format.names}
  1178. { 's :=
  1179.   #1 'nameptr :=
  1180.   s num.names$ 'numnames :=
  1181.   numnames 'namesleft :=
  1182.     { namesleft #0 > }
  1183. %<*!nm-rev1>
  1184.     { s nameptr 
  1185. %<!nm-init&!nm-rev&!nm-rv>      "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
  1186. %<nm-init>      "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  1187. %<!nm-init&nm-rev>      "{vv~}{ll}{, jj}{, f.}" format.name$ 't := 
  1188. %<!nm-init&!nm-rev&nm-rv>      "{vv~}{ll}{ jj}{ f{~}}" format.name$ 't := 
  1189. %</!nm-rev1>
  1190. %<*nm-rev1>
  1191.     { nameptr #1 >
  1192.         { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := }
  1193.         { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := }
  1194.       if$
  1195. %</nm-rev1>
  1196.       nameptr #1 >
  1197.         { 
  1198. %<*nmlm>
  1199. %<m1>          nameptr #2 =
  1200. %<m2>          nameptr #3 =
  1201. %<m3>          nameptr #4 =
  1202. %<m4>          nameptr #5 =
  1203. %<m5>          nameptr #6 =
  1204. %<x1>          numnames #1 > and
  1205. %<x2>          numnames #2 > and
  1206. %<x3>          numnames #3 > and
  1207. %<x4>          numnames #4 > and
  1208. %<x5>          numnames #5 > and
  1209. %<x6>          numnames #6 > and
  1210. %<x7>          numnames #7 > and
  1211. %<x8>          numnames #8 > and
  1212. %<x9>          numnames #9 > and
  1213.             { "others" 't :=
  1214.               #1 'namesleft := }
  1215.             'skip$
  1216.           if$
  1217. %</nmlm>
  1218.           namesleft #1 >
  1219.             { ", " * t * }
  1220.             {
  1221. %<and-com|xand>              "," *
  1222. %<*!and-xcom&!and-com&!xand>
  1223.               numnames #2 >
  1224.                 { "," * }
  1225.                 'skip$
  1226.               if$
  1227. %</!and-xcom&!and-com&!xand>
  1228.               t "others" =
  1229. %<!etal-it>                { " et~al." * }
  1230. %<etal-it>                { " " * "et~al." emphasize * }
  1231. %<*!harnm>
  1232. %<!amper&!xand>                { " and " * t * }
  1233. %<amper&!xand>                { " \& " * t * }
  1234. %</!harnm>
  1235. %<harnm&!xand>                { " \harvardand\ " * t * }
  1236. %<xand>                { " " * t * }
  1237.               if$
  1238.             }
  1239.           if$
  1240.         }
  1241.         't
  1242.       if$
  1243.       nameptr #1 + 'nameptr :=
  1244.       namesleft #1 - 'namesleft :=
  1245.     }
  1246.   while$
  1247. %    \end{macrocode}
  1248. % \changes{1.6}{1995 Feb 2}{Add option \texttt{ed-rev} to allow editor
  1249. %    to be formatted just like authors'}
  1250. %    \begin{macrocode}
  1251. FUNCTION {format.names.ed}
  1252. %<ed-rev>{ format.names }
  1253. %<*!ed-rev>
  1254. { 's :=
  1255.   #1 'nameptr :=
  1256.   s num.names$ 'numnames :=
  1257.   numnames 'namesleft :=
  1258.     { namesleft #0 > }
  1259.     { s nameptr 
  1260. %<!nm-init&!nm-rev&!nm-rev1&!nm-rv>      "{ff~}{vv~}{ll}{, jj}" 
  1261. %<nm-init|nm-rev|nm-rev1>      "{f.~}{vv~}{ll}{, jj}" 
  1262. %<!nm-init&!nm-rev&!nm-rev1&nm-rv>      "{f{~}~}{vv~}{ll}{ jj}" 
  1263.       format.name$ 't := 
  1264.       nameptr #1 >
  1265.         { 
  1266.           namesleft #1 >
  1267.             { ", " * t * }
  1268.             {
  1269. %<and-com|xand>              "," *
  1270. %<*!and-xcom&!and-com&!xand>
  1271.               numnames #2 >
  1272.                 { "," * }
  1273.                 'skip$
  1274.               if$
  1275. %</!and-xcom&!and-com&!xand>
  1276.               t "others" =
  1277. %<!etal-it>                { " et~al." * }
  1278. %<etal-it>                { " " * "et~al." emphasize * }
  1279. %<*!harnm>
  1280. %<!amper&!xand>                { " and " * t * }
  1281. %<amper&!xand>                { " \& " * t * }
  1282. %</!harnm>
  1283. %<harnm&!xand>                { " \harvardand\ " * t * }
  1284. %<xand>                { " " * t * }
  1285.               if$
  1286.             }
  1287.           if$
  1288.         }
  1289.         't
  1290.       if$
  1291.       nameptr #1 + 'nameptr :=
  1292.       namesleft #1 - 'namesleft :=
  1293.     }
  1294.   while$
  1295. %</!ed-rev>
  1296. %<*ay>
  1297. FUNCTION {format.key}                   
  1298. { empty$
  1299.     { key field.or.null }
  1300.     { "" }
  1301.   if$
  1302. %</ay>
  1303. FUNCTION {format.authors}
  1304. { author empty$
  1305.     { "" }
  1306. %<!nmft-sc&!nmft-bf&!nmft-it>    { author format.names }
  1307. %<nmft-sc>    { "{\sc " author format.names * "}" * }
  1308. %<!nmft-sc&nmft-bf>    { author format.names bolden }
  1309. %<!nmft-sc&!nmft-bf&nmft-it>    { author format.names emphasize }
  1310.   if$
  1311. FUNCTION {format.editors}
  1312. { editor empty$
  1313.     { "" }
  1314. %<!nmft-sc&!nmft-bf&!nmft-it>    { editor format.names 
  1315. %<nmft-sc>    { "{\sc " editor format.names * "}" * 
  1316. %<!nmft-sc&nmft-bf>    { editor format.names bolden 
  1317. %<!nmft-sc&!nmft-bf&nmft-it>    { editor format.names emphasize 
  1318.       editor num.names$ #1 >
  1319. %<!ed>        { ", editors" * }
  1320. %<!ed>        { ", editor" * }
  1321. %<ed>        { " (eds.)" * }
  1322. %<ed>        { " (ed.)" * }
  1323.       if$
  1324.     }
  1325.   if$
  1326. FUNCTION {format.in.editors}
  1327. { editor empty$
  1328.     { "" }
  1329.     { editor format.names.ed
  1330. %<*!edby&!edby-par>
  1331.       editor num.names$ #1 >
  1332. %<!ed>        { ", editors" * }
  1333. %<!ed>        { ", editor" * }
  1334. %<ed>        { " (eds.)" * }
  1335. %<ed>        { " (ed.)" * }
  1336.       if$
  1337. %</!edby&!edby-par>
  1338.     }
  1339.   if$
  1340. %    \end{macrocode}
  1341. % \changes{1.4a}{1994 Sep 7}{Add enquote function to put titles in quotes,
  1342. %    such that punctuation is inside quotes.}
  1343. %    \begin{macrocode}
  1344. FUNCTION {format.title}
  1345. { title empty$
  1346.     { "" }
  1347. %<!atit-u>    { title "t" change.case$ 
  1348. %<atit-u>    { title 
  1349. %<tit-it>      emphasize
  1350. %<*!tit-it&(tit-q|tit-qq)>
  1351.       "\enquote{" swap$ * 
  1352. %<*blk-com>
  1353.       non.stop
  1354.         { ",} " * }
  1355.         { "} " * }
  1356.       if$
  1357. %</blk-com>
  1358. %<!blk-com>      add.period$ "}" *
  1359. %</!tit-it&(tit-q|tit-qq)>
  1360.     }
  1361.   if$
  1362. %    \end{macrocode}
  1363. % \changes{1.1}{1993 Nov 12}{Add key labels to \texttt{calc.long.label} and
  1364. %     get {\tt'author} and {\tt'editor} in right order when author missing}
  1365. % \changes{1.4}{1994 Sep 5}{Remove \texttt{calc.long.label} and
  1366. %     \texttt{format.long.lab.names}, replacing them with 
  1367. %     \texttt{format.full.names}, \texttt{make.full.names}, and adding
  1368. %     \texttt{author.editor.key}, \texttt{author.key}, and \texttt{editor.key}}
  1369. % \changes{1.4a}{1994 Sep 7}{Remove option \texttt{and-com} from 
  1370. %     \texttt{make.full.names}}
  1371. % \changes{1.5}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3}
  1372. % In versions before 1.4, there were two functions \texttt{calc.long.label}
  1373. % and \texttt{format.long.lab.names} that made up the string
  1374. % \texttt{long.label} for each entry. This contains the full author list.
  1375. % However, there was a bug in the one routine, entered by mistake when an
  1376. % earlier bug was removed, and more seriously, the string
  1377. % \texttt{long.label} was limited to \texttt{entry.max\$} characters, 100 on
  1378. % my system. Author lists were truncated.  Thus, \texttt{make.full.names}
  1379. % is used instead to enter the full list of names directly in the
  1380. % \texttt{output.bibitem} function, without an intermediate string. This
  1381. % involves changing the order of some function definitions, especially
  1382. % \texttt{output.bibitem} must come later.
  1383. %    \begin{macrocode}
  1384. %<*har|cay|nat>
  1385. FUNCTION {format.full.names}
  1386. {'s :=
  1387.   #1 'nameptr :=
  1388.   s num.names$ 'numnames :=
  1389.   numnames 'namesleft :=
  1390.     { namesleft #0 > }
  1391.     { s nameptr 
  1392.       "{vv~}{ll}" format.name$ 't :=
  1393.       nameptr #1 >
  1394.         { 
  1395. %<*nmlm>
  1396. %<m1>          nameptr #2 =
  1397. %<m2>          nameptr #3 =
  1398. %<m3>          nameptr #4 =
  1399. %<m4>          nameptr #5 =
  1400. %<m5>          nameptr #6 =
  1401. %<x1>          numnames #1 > and
  1402. %<x2>          numnames #2 > and
  1403. %<x3>          numnames #3 > and
  1404. %<x4>          numnames #4 > and
  1405. %<x5>          numnames #5 > and
  1406. %<x6>          numnames #6 > and
  1407. %<x7>          numnames #7 > and
  1408. %<x8>          numnames #8 > and
  1409. %<x9>          numnames #9 > and
  1410.             { "others" 't :=
  1411.               #1 'namesleft := }
  1412.             'skip$
  1413.           if$
  1414. %</nmlm>
  1415.           namesleft #1 >
  1416.             { ", " * t * }
  1417.             {
  1418. %<*!and-xcom>
  1419.               numnames #2 >
  1420.                 { "," * }
  1421.                 'skip$
  1422.               if$
  1423. %</!and-xcom>
  1424.               t "others" =
  1425. %<!etal-it>                { " et~al." * }
  1426. %<etal-it>                { " " * "et~al." emphasize * }
  1427. %<*!harnm>
  1428. %<!amper>                { " and " * t * }
  1429. %<amper>                { " \& " * t * }
  1430. %</!harnm>
  1431. %<harnm>                { " \harvardand\ " * t * }
  1432.               if$
  1433.             }
  1434.           if$
  1435.         }
  1436.         't
  1437.       if$
  1438.       nameptr #1 + 'nameptr :=
  1439.       namesleft #1 - 'namesleft :=
  1440.     }
  1441.   while$
  1442. FUNCTION {author.editor.key.full}
  1443. { author empty$
  1444.     { editor empty$
  1445.         { key empty$
  1446.             { cite$ #1 #3 substring$ }
  1447.             'key
  1448.           if$
  1449.         }
  1450.         { editor format.full.names }
  1451.       if$
  1452.     }  
  1453.     { author format.full.names }
  1454.   if$
  1455. FUNCTION {author.key.full}
  1456. { author empty$
  1457.     { key empty$
  1458.          { cite$ #1 #3 substring$ }
  1459.           'key
  1460.       if$
  1461.     }  
  1462.     { author format.full.names }
  1463.   if$
  1464. FUNCTION {editor.key.full}
  1465. { editor empty$
  1466.     { key empty$
  1467.          { cite$ #1 #3 substring$ }
  1468.           'key
  1469.       if$
  1470.     }  
  1471.     { editor format.full.names }
  1472.   if$
  1473. FUNCTION {make.full.names}
  1474. { type$ "book" =
  1475.   type$ "inbook" =
  1476.     'author.editor.key.full
  1477.     { type$ "proceedings" =
  1478.         'editor.key.full
  1479.         'author.key.full
  1480.       if$
  1481.     }
  1482.   if$
  1483. %<lab-it>  emphasize
  1484. %</har|cay|nat>
  1485. %    \end{macrocode}
  1486. %\changes{1.1}{1993 Nov 12}{Test for missing year, set to ????}
  1487. %\changes{1.4}{1994 Sep 5}{Change position of \texttt{output.bibitem},
  1488. %  use \texttt{make.full.names} instead of inserting string \texttt{long.label}}
  1489. %\changes{1.5}{1994 Sep 16}{Add option \texttt{nat} for full author list
  1490. %  for \texttt{natbib.sty} version~5.3}
  1491. %    \begin{macrocode}
  1492. FUNCTION {output.bibitem}
  1493. { newline$
  1494. %<*ay>
  1495. %<!har>  "\bibitem[" write$
  1496. %<har>  "\harvarditem[" write$
  1497. %<ast>  "\protect\astroncite{" write$
  1498. %<cay>  "\protect\citeauthoryear{" make.full.names * "}{" * write$
  1499. %<cn>  "\protect\citename{" write$
  1500.   label write$
  1501. %<har>  "]{" make.full.names * "}{" * write$
  1502. %<har>  year duplicate$ empty$
  1503. %<cn>  ", }" year duplicate$ empty$
  1504. %<cay|ast>  "}{" year duplicate$ empty$
  1505. %<har|cn|cay|ast>    { pop$ "????" }
  1506. %<har|cn|cay|ast>    'skip$
  1507. %<har|cn|cay|ast>  if$
  1508. %<har>  extra.label * "}{" * write$
  1509. %<cn>  * extra.label * "]{" * write$
  1510. %<cay|ast>  * extra.label * "}]{" * write$
  1511. %<alk>  "]{" write$
  1512. %<!(har|cay|ast|alk|cn|nat)>  ")]{" write$
  1513. %<nat>  ")" make.full.names * "]{" * write$
  1514. %</ay>
  1515. %<!ay&!cite>  "\bibitem{" write$
  1516. %<!ay&cite>  "\bibitem[" label * "]{" * write$
  1517.   cite$ write$
  1518.   "}" write$
  1519.   newline$
  1520.   before.all 'output.state :=
  1521. FUNCTION {n.dashify}
  1522. { 't :=
  1523.     { t empty$ not }
  1524.     { t #1 #1 substring$ "-" =
  1525.         { t #1 #2 substring$ "--" = not
  1526.             { "--" *
  1527.               t #2 global.max$ substring$ 't :=
  1528.             }
  1529.             {   { t #1 #1 substring$ "-" = }
  1530.                 { "-" *
  1531.                   t #2 global.max$ substring$ 't :=
  1532.                 }
  1533.               while$
  1534.             }
  1535.           if$
  1536.         }
  1537.         { t #1 #1 substring$ *
  1538.           t #2 global.max$ substring$ 't :=
  1539.         }
  1540.       if$
  1541.     }
  1542.   while$
  1543. FUNCTION {word.in}
  1544. %<blk-com&!in-blk&in-col>{ "in: " }
  1545. %<blk-com&!in-blk&!in-col>{ "in " }
  1546. %<(!blk-com|in-blk)&in-col>{ "In: " }
  1547. %<(!blk-com|in-blk)&!in-col>{ "In " }
  1548. %    \end{macrocode}
  1549. % \changes{1.4}{1994 Sep 6}{Add option \texttt{yr-per} to put period 
  1550. %    before date}
  1551. % \changes{1.5}{1994 Sep 16}{Add \texttt{harvard} bracket names to year
  1552. %    with new option \texttt{harnm}}
  1553. % \changes{1.6}{1995 Feb 2}{Add \texttt{yr-blk} for no punctuation before
  1554. %    the date}
  1555. % The new \texttt{harvard.sty} allows variable brackets around the date
  1556. % in the reference list. It uses |\harvardyearleft| and |\harvardyearright|
  1557. % in the \texttt{.bst} files. Allow this with the option \texttt{harnm},
  1558. % which could actually be used without the \texttt{har} option. Note that
  1559. % this overrides the other year formatting options.
  1560. %    \begin{macrocode}
  1561. %<*ay>
  1562. FUNCTION {format.date}
  1563. { year duplicate$ empty$
  1564.     { "empty year in " cite$ * "; set to ????" * warning$ 
  1565.        pop$ "????" }
  1566.     'skip$
  1567.   if$
  1568. %<*!harnm>
  1569. %<yr-par|yr-brk|yr-col|yr-blk>  before.all 'output.state :=
  1570. %<yr-par>  " (" swap$ * extra.label * ")" *
  1571. %<!yr-par&yr-brk>  " [" swap$ * extra.label * "]" *
  1572. %<!yr-par&!yr-brk&yr-col>  ": " swap$ * extra.label *
  1573. %<!yr-par&!yr-brk&!yr-col&yr-per>  after.sentence 'output.state :=
  1574. %<!yr-par&!yr-brk&!yr-col&!yr-per&yr-blk>  " " swap$ *
  1575. %<!yr-par&!yr-brk&!yr-col>  extra.label *
  1576. %</!harnm>
  1577. %<harnm>  " \harvardyearleft " swap$ * extra.label * " \harvardyearright " *
  1578. %</ay>
  1579. %<*!ay>
  1580. FUNCTION {format.date}
  1581. { year empty$
  1582.     { month empty$
  1583.         { "" }
  1584.         { "there's a month but no year in " cite$ * warning$
  1585.           month
  1586.         }
  1587.       if$
  1588.     }
  1589.     { month empty$
  1590.         'year
  1591.         { month " " * year * }
  1592.       if$
  1593.     }
  1594.   if$
  1595. %<yr-par|yr-brk|yr-col|yr-blk>  before.all 'output.state :=
  1596. %<yr-par>  " (" swap$ * ")" *
  1597. %<!yr-par&yr-brk>  " [" swap$ * "]" *
  1598. %<!yr-par&!yr-brk&yr-col>  ": " swap$ *
  1599. %<!yr-par&!yr-brk&!yr-col&yr-per>  after.sentence 'output.state :=
  1600. %<!yr-par&!yr-brk&!yr-col&!yr-per&yr-blk>  " " swap$ *
  1601. %</!ay>
  1602. FUNCTION {format.btitle}
  1603. %<!btit-rm>{ title emphasize
  1604. %<btit-rm>{ title 
  1605. FUNCTION {tie.or.space.connect}
  1606. { duplicate$ text.length$ #3 <
  1607.     { "~" }
  1608.     { " " }
  1609.   if$
  1610.   swap$ * *
  1611. FUNCTION {either.or.check}
  1612. { empty$
  1613.     'pop$
  1614.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  1615.   if$
  1616. FUNCTION {format.bvolume}
  1617. { volume empty$
  1618.     { "" }
  1619. %<!abr>    { "volume" volume tie.or.space.connect
  1620. %<abr>    { "vol." volume tie.or.space.connect
  1621.       series empty$
  1622.         'skip$
  1623.         { " of " * series emphasize * }
  1624.       if$
  1625.       "volume and number" number either.or.check
  1626.     }
  1627.   if$
  1628. FUNCTION {format.number.series}
  1629. { volume empty$
  1630.     { number empty$
  1631.         { series field.or.null }
  1632.         { output.state mid.sentence =
  1633. %<!abr>            { "number" }
  1634. %<!abr>            { "Number" }
  1635. %<abr>            { "no." }
  1636. %<abr>            { "No." }
  1637.           if$
  1638.           number tie.or.space.connect
  1639.           series empty$
  1640.             { "there's a number but no series in " cite$ * warning$ }
  1641.             { " in " * series * }
  1642.           if$
  1643.         }
  1644.       if$
  1645.     }
  1646.     { "" }
  1647.   if$
  1648. FUNCTION {format.edition}
  1649. { edition empty$
  1650.     { "" }
  1651.     { output.state mid.sentence =
  1652. %<!abr>        { edition "l" change.case$ " edition" * }
  1653. %<!abr>        { edition "t" change.case$ " edition" * }
  1654. %<abr>        { edition "l" change.case$ " edn." * }
  1655. %<abr>        { edition "t" change.case$ " edn." * }
  1656.       if$
  1657.     }
  1658.   if$
  1659. INTEGERS { multiresult }
  1660. FUNCTION {multi.page.check}
  1661. { 't :=
  1662.   #0 'multiresult :=
  1663.     { multiresult not
  1664.       t empty$ not
  1665.       and
  1666.     }
  1667.     { t #1 #1 substring$
  1668.       duplicate$ "-" =
  1669.       swap$ duplicate$ "," =
  1670.       swap$ "+" =
  1671.       or or
  1672.         { #1 'multiresult := }
  1673.         { t #2 global.max$ substring$ 't := }
  1674.       if$
  1675.     }
  1676.   while$
  1677.   multiresult
  1678. FUNCTION {format.pages}
  1679. { pages empty$
  1680.     { "" }
  1681.     { pages multi.page.check
  1682. %<!pp>        { "pages" pages n.dashify tie.or.space.connect }
  1683. %<!pp>        { "page" pages tie.or.space.connect }
  1684. %<pp>        { "pp." pages n.dashify tie.or.space.connect }
  1685. %<pp>        { "p." pages tie.or.space.connect }
  1686.       if$
  1687.     }
  1688.   if$
  1689. %<*jpg-1|pg-1>
  1690. FUNCTION {first.page}
  1691. { 't :=
  1692.     {  t empty$ not t #1 #1 substring$ "-" = not and }
  1693.     { t #1 #1 substring$ *
  1694.       t #2 global.max$ substring$ 't :=
  1695.     }
  1696.   while$
  1697. %</jpg-1|pg-1>
  1698. %    \end{macrocode}
  1699. % \changes{1.4}{1994 Sep 6}{Add option \texttt{volp-sp} to put space
  1700. %    after colon in vol:~page.}
  1701. % \changes{1.5c}{1995 Jan 20}{Add options \texttt{vnum-h}, \texttt{vnum-nr} 
  1702. %    and \texttt{vnum-x} for various formats of journal vol number}
  1703. % \changes{1.6}{1995 Feb 2}{Add option \texttt{vnum-s}}
  1704. %    \begin{macrocode}
  1705. FUNCTION {format.vol.num.pages}
  1706. { volume field.or.null
  1707. %<vol-bf&!vol-2bf>  bolden
  1708. %<!vol-bf&!vol-2bf&vol-it>  emphasize
  1709. %<*!vnum-x>
  1710.   number empty$
  1711.     'skip$
  1712.     { 
  1713. %<!vnum-nr&!vnum-h&!vnum-s>      "(" number * ")" * *
  1714. %<vnum-nr>      ", no." number tie.or.space.connect *
  1715. %<!vnum-nr&vnum-h>      ", \#" number * *
  1716. %<!vnum-nr&!vnum-h&vnum-s>      ", " number * *
  1717. %<!vol-bf&vol-2bf>      bolden
  1718.       volume empty$
  1719.         { "there's a number but no volume in " cite$ * warning$ }
  1720.         'skip$
  1721.       if$
  1722.     }
  1723.   if$
  1724. %</!vnum-x>
  1725.   pages empty$
  1726.     'skip$
  1727.     { duplicate$ empty$
  1728.         { pop$ format.pages }
  1729. %<!volp-com&!volp-sp&!jpg-1>        { ":" * pages n.dashify * }
  1730. %<volp-sp&!jpg-1>        { ": " * pages n.dashify * }
  1731. %<volp-com&!volp-sp&!jpg-1>        { ", " * pages n.dashify * }
  1732. %<!volp-com&!volp-sp&jpg-1>        { ":" * pages first.page * }
  1733. %<volp-sp&jpg-1>        { ": " * pages first.page * }
  1734. %<volp-com&!volp-sp&jpg-1>        { ", " * pages first.page * }
  1735.       if$
  1736.     }
  1737.   if$
  1738. FUNCTION {format.chapter.pages}
  1739. { chapter empty$
  1740.     'format.pages
  1741.     { type empty$
  1742. %<!abr>        { "chapter" }
  1743. %<abr>        { "chap." }
  1744.         { type "l" change.case$ }
  1745.       if$
  1746.       chapter tie.or.space.connect
  1747.       pages empty$
  1748.         'skip$
  1749.         { ", " * format.pages * }
  1750.       if$
  1751.     }
  1752.   if$
  1753. %    \end{macrocode}
  1754. % \changes{1.5b}{1995 Jan 18}{Add option \texttt{edby-par} to put editors
  1755. %   in parentheses}
  1756. % \changes{1.6}{1995 Feb 2}{If \texttt{ed} and \texttt{edby} given together,
  1757. %   abbreviate `edited by' to `ed(s).'}
  1758. %    \begin{macrocode}
  1759. FUNCTION {format.in.ed.booktitle}
  1760. { booktitle empty$
  1761.     { "" }
  1762.     { editor empty$
  1763.         { word.in booktitle emphasize * }
  1764. %<!edby&!edby-par>        { word.in format.in.editors * ", " * 
  1765. %<!edby&!edby-par>          booktitle emphasize * }
  1766. %<*edby|edby-par>
  1767.         { word.in booktitle emphasize * 
  1768. %<*!ed>
  1769. %<edby>          ", edited by " * 
  1770. %<edby-par>          " (Edited by " * 
  1771. %</!ed>
  1772. %<*ed>
  1773. %<edby>          ", " *
  1774. %<edby-par>          " (" *
  1775.           editor num.names$ #1 >
  1776.             { "eds." }
  1777.             { "ed." } 
  1778.           if$
  1779. %<edby-par>          "u" change.case$ "t" change.case$ 
  1780.           * " " *
  1781. %</ed>
  1782.           format.in.editors * 
  1783. %<edby-par>          ")" *
  1784.         }
  1785. %</edby|edby-par>
  1786.       if$
  1787.     }
  1788.   if$
  1789. %<*!ay>
  1790. FUNCTION {empty.misc.check}
  1791. { author empty$ title empty$ howpublished empty$
  1792.   month empty$ year empty$ note empty$
  1793.   and and and and and
  1794.   key empty$ not and
  1795.     { "all relevant fields are empty in " cite$ * warning$ }
  1796.     'skip$
  1797.   if$
  1798. %</!ay>
  1799. FUNCTION {format.thesis.type}
  1800. { type empty$
  1801.     'skip$
  1802.     { pop$
  1803.       type "t" change.case$
  1804.     }
  1805.   if$
  1806. FUNCTION {format.tr.number}
  1807. { type empty$
  1808. %<!abr>    { "Technical Report" }
  1809. %<abr>    { "Tech. Rep." }
  1810.     'type
  1811.   if$
  1812.   number empty$
  1813.     { "t" change.case$ }
  1814.     { number tie.or.space.connect }
  1815.   if$
  1816. %    \end{macrocode}
  1817. %\changes{1.3}{1994 Jul 1}{Emphasize \texttt{journal} with \texttt{emphasize}, 
  1818. %          not explicitly}
  1819. %    \begin{macrocode}
  1820. FUNCTION {format.article.crossref}
  1821. %<*!ay>
  1822.   key empty$
  1823.     { journal empty$
  1824.         { "need key or journal for " cite$ * " to crossref " * crossref *
  1825.           warning$
  1826.           ""
  1827.         }
  1828.         { word.in journal emphasize * } 
  1829.       if$
  1830.     }
  1831.     { word.in key * " " *}
  1832.   if$
  1833. %</!ay>
  1834. %<ay>  word.in
  1835.   " \cite{" * crossref * "}" *
  1836. %<*!ay>
  1837. FUNCTION {format.crossref.editor}
  1838. { editor #1 "{vv~}{ll}" format.name$
  1839.   editor num.names$ duplicate$
  1840.   #2 >
  1841. %<!etal-it>    { pop$ " et~al." * }
  1842. %<etal-it>    { pop$ " " * "et~al." emphasize * }
  1843.     { #2 <
  1844.         'skip$
  1845.         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  1846. %<!etal-it>            { " et~al." * }
  1847. %<etal-it>            { " " * "et~al." emphasize * }
  1848. %<*!harnm>
  1849. %<!amper>            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  1850. %<amper>            { " \& " * editor #2 "{vv~}{ll}" format.name$ * }
  1851. %</!harnm>
  1852. %<harnm>            { " \harvardand\ " * editor #2 "{vv~}{ll}" format.name$ * }
  1853.           if$
  1854.         }
  1855.       if$
  1856.     }
  1857.   if$
  1858. %</!ay>
  1859. %    \end{macrocode}
  1860. %\changes{1.3}{1994 Jul 1}{Emphasize \texttt{series} with \texttt{emphasize}, 
  1861. %       not explicitly}
  1862. %    \begin{macrocode}
  1863. FUNCTION {format.book.crossref}
  1864. { volume empty$
  1865.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  1866.       word.in
  1867.     }
  1868. %<!abr&!(blk-com|blk-tit)>    { "Volume" volume tie.or.space.connect
  1869. %<abr&!(blk-com|blk-tit)>    { "Vol." volume tie.or.space.connect
  1870. %<!abr&(blk-com|blk-tit)>    { "volume" volume tie.or.space.connect
  1871. %<abr&(blk-com|blk-tit)>    { "vol." volume tie.or.space.connect
  1872.       " of " *
  1873.     }
  1874.   if$
  1875. %<*!ay>
  1876.   editor empty$
  1877.   editor field.or.null author field.or.null =
  1878.     { key empty$
  1879.         { series empty$
  1880.             { "need editor, key, or series for " cite$ * " to crossref " *
  1881.               crossref * warning$
  1882.               "" *
  1883.             }
  1884.             { series emphasize * }
  1885.           if$
  1886.         }
  1887.         { key * }
  1888.       if$
  1889.     }
  1890.     { format.crossref.editor * }
  1891.   if$
  1892. %</!ay>
  1893.   " \cite{" * crossref * "}" *
  1894. %    \end{macrocode}
  1895. %\changes{1.3}{1994 Jul 1}{Emphasize \texttt{booktitle} with 
  1896. %      \texttt{emphasize}, not explicitly}
  1897. %    \begin{macrocode}
  1898. FUNCTION {format.incoll.inproc.crossref}
  1899. %<*!ay>
  1900.   editor empty$
  1901.   editor field.or.null author field.or.null =
  1902.     { key empty$
  1903.         { booktitle empty$
  1904.             { "need editor, key, or booktitle for " cite$ * " to crossref " *
  1905.               crossref * warning$
  1906.               ""
  1907.             }
  1908.             { word.in booktitle emphasize * }
  1909.           if$
  1910.         }
  1911.         { word.in key * " " *}
  1912.       if$
  1913.     }
  1914.     { word.in format.crossref.editor * " " *}
  1915.   if$
  1916. %</!ay>
  1917. %<ay>  word.in
  1918.   " \cite{" * crossref * "}" *
  1919. %    \end{macrocode}
  1920. % \changes{1.5b}{1995 Jan 18}{Add option \texttt{yrp-x} to suppress 
  1921. %    punctuation following date at beginning}
  1922. %    \begin{macrocode}
  1923. FUNCTION {article}
  1924. { output.bibitem
  1925.   format.authors "author" output.check
  1926. %<ay>  author format.key output
  1927. %<dt-beg>  format.date "year" output.check
  1928. %<dt-beg&yrp-x>  add.blank
  1929. %<!blk-com&!blk-tit&!yrp-x>  new.block
  1930. %<*!jtit-x>
  1931.   format.title "title" output.check
  1932. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  1933. %<!blk-com&!blk-tit>  new.block
  1934. %<blk-tit>  new.sentence
  1935. %</!jtit-x>
  1936.   crossref missing$
  1937.     { journal emphasize "journal" output.check
  1938. %<jnm-x>      add.blank
  1939.       format.vol.num.pages output
  1940. %<!dt-beg&!dt-end>      format.date "year" output.check
  1941.     }
  1942.     { format.article.crossref output.nonnull
  1943.       format.pages output
  1944.     }
  1945.   if$
  1946. %<!blk-com&!blk-tit>  new.block
  1947.   note output
  1948. %<*!dt-beg&dt-end>
  1949. %<!blk-com&!blk-tit>  new.block 
  1950.   format.date "year" output.check
  1951. %</!dt-beg&dt-end>
  1952.   fin.entry
  1953. %<harnm>  write.url
  1954. %    \end{macrocode}
  1955. %\changes{1.3a}{1994 Aug 30}{Fix up \texttt{new.sentence} so not added with
  1956. %        \texttt{blk-com}}
  1957. %    \begin{macrocode}
  1958. FUNCTION {book}
  1959. { output.bibitem
  1960.   author empty$
  1961.     { format.editors "author and editor" output.check
  1962. %<ay>      editor format.key output
  1963.     }
  1964.     { format.authors output.nonnull
  1965.       crossref missing$
  1966.         { "author and editor" editor either.or.check }
  1967.         'skip$
  1968.       if$
  1969.     }
  1970.   if$
  1971. %<dt-beg>  format.date "year" output.check
  1972. %<dt-beg&yrp-x>  add.blank
  1973. %<!blk-com&!blk-tit&!yrp-x>  new.block
  1974.   format.btitle "title" output.check
  1975.   crossref missing$
  1976.     { format.bvolume output
  1977. %<!blk-com&!blk-tit>      new.block
  1978. %<blk-tit>  new.sentence
  1979.       format.number.series output
  1980. %<!blk-com&!blk-tit>      new.sentence
  1981.       publisher "publisher" output.check
  1982.       address output
  1983.     }
  1984.     {
  1985. %<!blk-com&!blk-tit>      new.block
  1986. %<blk-tit>  new.sentence
  1987.       format.book.crossref output.nonnull
  1988.     }
  1989.   if$
  1990.   format.edition output
  1991. %<!dt-beg&!dt-end>  format.date "year" output.check
  1992. %<!blk-com&!blk-tit>  new.block
  1993.   note output
  1994. %<*!dt-beg&dt-end>
  1995. %<!blk-com&!blk-tit>  new.block 
  1996.   format.date "year" output.check
  1997. %</!dt-beg&dt-end>
  1998.   fin.entry
  1999. %<harnm>  write.url
  2000. FUNCTION {booklet}
  2001. { output.bibitem
  2002.   format.authors output
  2003. %<ay>  author format.key output
  2004. %<ay&dt-beg>  format.date "year" output.check
  2005. %<!ay&dt-beg>  format.date output
  2006. %<dt-beg&yrp-x>  add.blank
  2007. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2008.   format.title "title" output.check
  2009. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2010. %<!blk-com&!blk-tit>  new.block
  2011. %<blk-tit>  new.sentence
  2012.   howpublished output
  2013.   address output
  2014. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  2015. %<!ay&!dt-beg&!dt-end>  format.date output
  2016. %<!blk-com&!blk-tit>  new.block
  2017.   note output
  2018. %<*ay&!dt-beg&dt-end>
  2019. %<!blk-com&!blk-tit>  new.block 
  2020.   format.date "year" output.check
  2021. %</ay&!dt-beg&dt-end>
  2022. %<*!ay&!dt-beg&dt-end>
  2023. %<!blk-com&!blk-tit>  new.block 
  2024.   format.date output
  2025. %</!ay&!dt-beg&dt-end>
  2026.   fin.entry
  2027. %<harnm>  write.url
  2028. FUNCTION {inbook}
  2029. { output.bibitem
  2030.   author empty$
  2031.     { format.editors "author and editor" output.check
  2032. %<ay>      editor format.key output
  2033.     }
  2034.     { format.authors output.nonnull
  2035.       crossref missing$
  2036.         { "author and editor" editor either.or.check }
  2037.         'skip$
  2038.       if$
  2039.     }
  2040.   if$
  2041. %<dt-beg>  format.date "year" output.check
  2042. %<dt-beg&yrp-x>  add.blank
  2043. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2044.   format.btitle "title" output.check
  2045.   crossref missing$
  2046.     { format.bvolume output
  2047.       format.chapter.pages "chapter and pages" output.check
  2048. %<!blk-com&!blk-tit>      new.block
  2049. %<blk-tit>  new.sentence
  2050.       format.number.series output
  2051. %<!blk-com&!blk-tit>      new.sentence
  2052.       publisher "publisher" output.check
  2053.       address output
  2054.     }
  2055.     { format.chapter.pages "chapter and pages" output.check
  2056. %<!blk-com&!blk-tit>      new.block
  2057. %<blk-tit>  new.sentence
  2058.       format.book.crossref output.nonnull
  2059.     }
  2060.   if$
  2061.   format.edition output
  2062. %<!dt-beg&!dt-end>  format.date "year" output.check
  2063. %<!blk-com&!blk-tit>  new.block
  2064.   note output
  2065. %<*!dt-beg&dt-end>
  2066. %<!blk-com&!blk-tit>  new.block 
  2067.   format.date "year" output.check
  2068. %</!dt-beg&dt-end>
  2069.   fin.entry
  2070. %<harnm>  write.url
  2071. FUNCTION {incollection}
  2072. { output.bibitem
  2073.   format.authors "author" output.check
  2074. %<ay>  author format.key output
  2075. %<dt-beg>  format.date "year" output.check
  2076. %<dt-beg&yrp-x>  add.blank
  2077. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2078. %<*!jtit-x>
  2079.   format.title "title" output.check
  2080. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2081. %<!blk-com&!blk-tit>  new.block
  2082. %<blk-tit|(blk-com&in-blk)>  new.sentence
  2083. %</!jtit-x>
  2084.   crossref missing$
  2085.     { format.in.ed.booktitle "booktitle" output.check
  2086.       format.bvolume output
  2087.       format.number.series output
  2088.       format.chapter.pages output
  2089. %<!blk-com&!blk-tit>      new.sentence
  2090.       publisher "publisher" output.check
  2091.       address output
  2092.       format.edition output
  2093. %<!dt-beg&!dt-end>      format.date "year" output.check
  2094.     }
  2095.     { format.incoll.inproc.crossref output.nonnull
  2096.       format.chapter.pages output
  2097.     }
  2098.   if$
  2099. %<!blk-com&!blk-tit>  new.block
  2100.   note output
  2101. %<*!dt-beg&dt-end>
  2102. %<!blk-com&!blk-tit>  new.block 
  2103.   format.date "year" output.check
  2104. %</!dt-beg&dt-end>
  2105.   fin.entry
  2106. %<harnm>  write.url
  2107. FUNCTION {inproceedings}
  2108. { output.bibitem
  2109.   format.authors "author" output.check
  2110. %<ay>  author format.key output
  2111. %<dt-beg>  format.date "year" output.check
  2112. %<dt-beg&yrp-x>  add.blank
  2113. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2114. %<*!jtit-x>
  2115.   format.title "title" output.check
  2116. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2117. %<!blk-com&!blk-tit>  new.block
  2118. %<blk-tit|(blk-com&in-blk)>  new.sentence
  2119. %</!jtit-x>
  2120.   crossref missing$
  2121.     { format.in.ed.booktitle "booktitle" output.check
  2122.       format.bvolume output
  2123.       format.number.series output
  2124.       format.pages output
  2125. %<*!ay>
  2126.       address empty$
  2127.         { organization publisher new.sentence.checkb
  2128.           organization output
  2129.           publisher output
  2130.           format.date "year" output.check
  2131.         }
  2132.         { address output.nonnull
  2133. %<!dt-beg&!dt-end>          format.date "year" output.check
  2134. %<!blk-com&!blk-tit>          new.sentence
  2135.           organization output
  2136.           publisher output
  2137.         }
  2138.       if$
  2139. %</!ay>
  2140. %<*ay>
  2141.       address output
  2142. %<!blk-com&!blk-tit>      new.sentence
  2143.       organization output
  2144.       publisher output
  2145. %<!dt-beg&!dt-end>  format.date "year" output.check
  2146. %</ay>
  2147.     }
  2148.     { format.incoll.inproc.crossref output.nonnull
  2149.       format.pages output
  2150.     }
  2151.   if$
  2152. %<!blk-com&!blk-tit>  new.block
  2153.   note output
  2154. %<*!dt-beg&dt-end>
  2155. %<!blk-com&!blk-tit>  new.block 
  2156.   format.date "year" output.check
  2157. %</!dt-beg&dt-end>
  2158.   fin.entry
  2159. %<harnm>  write.url
  2160. FUNCTION {conference} { inproceedings }
  2161. %<*ay>
  2162. FUNCTION {manual}
  2163. { output.bibitem
  2164.   format.authors output
  2165.   author format.key output
  2166. %<dt-beg>  format.date "year" output.check
  2167. %<dt-beg&yrp-x>  add.blank
  2168. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2169.   format.btitle "title" output.check
  2170. %<blk-tit>  new.sentence
  2171. %<!blk-com&!blk-tit>  organization address new.block.checkb
  2172.   organization output
  2173.   address output
  2174.   format.edition output
  2175. %<!dt-beg&!dt-end>  format.date "year" output.check
  2176. %<!blk-com&!blk-tit>  new.block
  2177.   note output
  2178. %<*!dt-beg&dt-end>
  2179. %<!blk-com&!blk-tit>  new.block 
  2180.   format.date "year" output.check
  2181. %</!dt-beg&dt-end>
  2182.   fin.entry
  2183. %<harnm>  write.url
  2184. %</ay>
  2185. %<*!ay>
  2186. FUNCTION {manual}
  2187. { output.bibitem
  2188.   author empty$
  2189.     { organization empty$
  2190.         'skip$
  2191.         { organization output.nonnull
  2192.           address output
  2193.         }
  2194.       if$
  2195.     }
  2196.     { format.authors output.nonnull }
  2197.   if$
  2198. %<ay&dt-beg>  format.date "year" output.check
  2199. %<!ay&dt-beg>  format.date output
  2200. %<dt-beg&yrp-x>  add.blank
  2201. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2202.   format.btitle "title" output.check
  2203. %<blk-tit>  new.sentence
  2204.   author empty$
  2205.     { organization empty$
  2206.     {
  2207. %<!blk-com&!blk-tit>          address new.block.checka
  2208.           address output
  2209.         }
  2210.         'skip$
  2211.       if$
  2212.     }
  2213.     {
  2214. %<!blk-com&!blk-tit>      organization address new.block.checkb
  2215.       organization output
  2216.       address output
  2217.     }
  2218.   if$
  2219.   format.edition output
  2220. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  2221. %<!ay&!dt-beg&!dt-end>  format.date output
  2222. %<!blk-com&!blk-tit>  new.block
  2223.   note output
  2224. %<*ay&!dt-beg&dt-end>
  2225. %<!blk-com&!blk-tit>  new.block 
  2226.   format.date "year" output.check
  2227. %</ay&!dt-beg&dt-end>
  2228. %<*!ay&!dt-beg&dt-end>
  2229. %<!blk-com&!blk-tit>  new.block 
  2230.   format.date output
  2231. %</!ay&!dt-beg&dt-end>
  2232.   fin.entry
  2233. %<harnm>  write.url
  2234. %</!ay>
  2235. FUNCTION {mastersthesis}
  2236. { output.bibitem
  2237.   format.authors "author" output.check
  2238. %<ay>  author format.key output
  2239. %<dt-beg>  format.date "year" output.check
  2240. %<dt-beg&yrp-x>  add.blank
  2241. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2242. %<!thtit-a>  format.btitle "title" output.check
  2243. %<thtit-a>  format.title "title" output.check
  2244. %<thtit-a&blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2245. %<!blk-com&!blk-tit>  new.block
  2246. %<blk-tit>  new.sentence
  2247.   "Master's thesis" format.thesis.type output.nonnull
  2248.   school "school" output.check
  2249.   address output
  2250. %<!dt-beg&!dt-end>  format.date "year" output.check
  2251. %<!blk-com&!blk-tit>  new.block
  2252.   note output
  2253. %<*!dt-beg&dt-end>
  2254. %<!blk-com&!blk-tit>  new.block 
  2255.   format.date "year" output.check
  2256. %</!dt-beg&dt-end>
  2257.   fin.entry
  2258. %<harnm>  write.url
  2259. FUNCTION {misc}
  2260. { output.bibitem
  2261.   format.authors output
  2262. %<ay>  author format.key output
  2263. %<ay&dt-beg>  format.date "year" output.check
  2264. %<!ay&dt-beg>  format.date output
  2265. %<*ay>
  2266. %<dt-beg&yrp-x>  add.blank
  2267. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2268.   format.title output
  2269. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2270. %<!blk-com&!blk-tit>  new.block
  2271. %<blk-tit>  new.sentence
  2272. %</ay>
  2273. %<*!ay>
  2274. %<!blk-com&!blk-tit>  title howpublished new.block.checkb
  2275.   format.title output
  2276. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2277. %<blk-tit>  new.sentence
  2278. %<!blk-com&!blk-tit>  howpublished new.block.checka
  2279. %</!ay>
  2280.   howpublished output
  2281. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  2282. %<!ay&!dt-beg&!dt-end>  format.date output
  2283. %<!blk-com&!blk-tit>  new.block
  2284.   note output
  2285. %<*ay&!dt-beg&dt-end>
  2286. %<!blk-com&!blk-tit>  new.block 
  2287.   format.date "year" output.check
  2288. %</ay&!dt-beg&dt-end>
  2289. %<*!ay&!dt-beg&dt-end>
  2290. %<!blk-com&!blk-tit>  new.block 
  2291.   format.date output
  2292. %</!ay&!dt-beg&dt-end>
  2293.   fin.entry
  2294. %<harnm>  write.url
  2295. FUNCTION {phdthesis}
  2296. { output.bibitem
  2297.   format.authors "author" output.check
  2298. %<ay>  author format.key output
  2299. %<dt-beg>  format.date "year" output.check
  2300. %<dt-beg&yrp-x>  add.blank
  2301. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2302. %<!thtit-a>  format.btitle "title" output.check
  2303. %<thtit-a>  format.title "title" output.check
  2304. %<thtit-a&blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2305. %<!blk-com&!blk-tit>  new.block
  2306. %<blk-tit>  new.sentence
  2307.   "Ph.D. thesis" format.thesis.type output.nonnull
  2308.   school "school" output.check
  2309.   address output
  2310. %<!dt-beg&!dt-end>  format.date "year" output.check
  2311. %<!blk-com&!blk-tit>  new.block
  2312.   note output
  2313. %<*!dt-beg&dt-end>
  2314. %<!blk-com&!blk-tit>  new.block 
  2315.   format.date "year" output.check
  2316. %</!dt-beg&dt-end>
  2317.   fin.entry
  2318. %<harnm>  write.url
  2319. %<*ay>
  2320. FUNCTION {proceedings}
  2321. { output.bibitem
  2322.   format.editors output
  2323.   editor format.key output
  2324. %<dt-beg>  format.date "year" output.check
  2325. %<dt-beg&yrp-x>  add.blank
  2326. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2327.   format.btitle "title" output.check
  2328.   format.bvolume output
  2329.   format.number.series output
  2330.   address output
  2331. %<!blk-com&!blk-tit>  new.sentence
  2332.   organization output
  2333.   publisher output
  2334. %<!dt-beg&!dt-end>  format.date "year" output.check
  2335. %<!blk-com&!blk-tit>  new.block
  2336.   note output
  2337. %<*!dt-beg&dt-end>
  2338. %<!blk-com&!blk-tit>  new.block 
  2339.   format.date "year" output.check
  2340. %</!dt-beg&dt-end>
  2341.   fin.entry
  2342. %<harnm>  write.url
  2343. %</ay>
  2344. %<*!ay>
  2345. FUNCTION {proceedings}
  2346. { output.bibitem
  2347.   editor empty$
  2348.     { organization output }
  2349.     { format.editors output.nonnull }
  2350.   if$
  2351. %<dt-beg>  format.date "year" output.check
  2352. %<dt-beg&yrp-x>  add.blank
  2353. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2354.   format.btitle "title" output.check
  2355.   format.bvolume output
  2356.   format.number.series output
  2357.   address empty$
  2358.     { editor empty$
  2359.         { publisher new.sentence.checka }
  2360.         { organization publisher new.sentence.checkb
  2361.           organization output
  2362.         }
  2363.       if$
  2364.       publisher output
  2365. %<!dt-beg&!dt-end>      format.date "year" output.check
  2366.     }
  2367.     { address output.nonnull
  2368. %<!dt-beg&!dt-end>      format.date "year" output.check
  2369. %<!blk-com&!blk-tit>      new.sentence
  2370.       editor empty$
  2371.         'skip$
  2372.         { organization output }
  2373.       if$
  2374.       publisher output
  2375.     }
  2376.   if$
  2377. %<!blk-com&!blk-tit>  new.block
  2378.   note output
  2379. %<*!dt-beg&dt-end>
  2380. %<!blk-com&!blk-tit>  new.block 
  2381.   format.date "year" output.check
  2382. %</!dt-beg&dt-end>
  2383.   fin.entry
  2384. %<harnm>  write.url
  2385. %</!ay>
  2386. FUNCTION {techreport}
  2387. { output.bibitem
  2388.   format.authors "author" output.check
  2389. %<ay>  author format.key output
  2390. %<dt-beg>  format.date "year" output.check
  2391. %<dt-beg&yrp-x>  add.blank
  2392. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2393.   format.title "title" output.check
  2394. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2395. %<!blk-com&!blk-tit>  new.block
  2396. %<blk-tit>  new.sentence
  2397.   format.tr.number output.nonnull
  2398.   institution "institution" output.check
  2399.   address output
  2400. %<!dt-beg&!dt-end>  format.date "year" output.check
  2401. %<!blk-com&!blk-tit>  new.block
  2402.   note output
  2403. %<*!dt-beg&dt-end>
  2404. %<!blk-com&!blk-tit>  new.block 
  2405.   format.date "year" output.check
  2406. %</!dt-beg&dt-end>
  2407.   fin.entry
  2408. %<harnm>  write.url
  2409. FUNCTION {unpublished}
  2410. { output.bibitem
  2411.   format.authors "author" output.check
  2412. %<ay>  author format.key output
  2413. %<ay&dt-beg>  format.date "year" output.check
  2414. %<!ay&dt-beg>  format.date output
  2415. %<dt-beg&yrp-x>  add.blank
  2416. %<!blk-com&!blk-tit&!yrp-x>  new.block
  2417.   format.title "title" output.check
  2418. %<blk-com&(tit-q|tit-qq)>  before.all 'output.state :=
  2419. %<!blk-com&!blk-tit>  new.block
  2420. %<blk-tit>  new.sentence
  2421.   note "note" output.check
  2422. %<*ay&!dt-beg&dt-end>
  2423. %<!blk-com&!blk-tit>  new.block 
  2424.   format.date "year" output.check
  2425. %</ay&!dt-beg&dt-end>
  2426. %<*!ay&!dt-beg&dt-end>
  2427. %<!blk-com&!blk-tit>  new.block 
  2428.   format.date output
  2429. %</!ay&!dt-beg&dt-end>
  2430.   fin.entry
  2431. %<harnm>  write.url
  2432. FUNCTION {default.type} { misc }
  2433. MACRO {jan} {"January"}
  2434. MACRO {feb} {"February"}
  2435. MACRO {mar} {"March"}
  2436. MACRO {apr} {"April"}
  2437. MACRO {may} {"May"}
  2438. MACRO {jun} {"June"}
  2439. MACRO {jul} {"July"}
  2440. MACRO {aug} {"August"}
  2441. MACRO {sep} {"September"}
  2442. MACRO {oct} {"October"}
  2443. MACRO {nov} {"November"}
  2444. MACRO {dec} {"December"}
  2445. MACRO {acmcs} {"ACM Computing Surveys"}
  2446. MACRO {acta} {"Acta Informatica"}
  2447. MACRO {cacm} {"Communications of the ACM"}
  2448. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  2449. MACRO {ibmsj} {"IBM Systems Journal"}
  2450. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  2451. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  2452. MACRO {ieeetcad}
  2453.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  2454. MACRO {ipl} {"Information Processing Letters"}
  2455. MACRO {jacm} {"Journal of the ACM"}
  2456. MACRO {jcss} {"Journal of Computer and System Sciences"}
  2457. MACRO {scp} {"Science of Computer Programming"}
  2458. MACRO {sicomp} {"SIAM Journal on Computing"}
  2459. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  2460. MACRO {tods} {"ACM Transactions on Database Systems"}
  2461. MACRO {tog} {"ACM Transactions on Graphics"}
  2462. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  2463. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  2464. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  2465. MACRO {tcs} {"Theoretical Computer Science"}
  2466. %<*ay|!seq-no>
  2467. FUNCTION {sortify}
  2468. { purify$
  2469.   "l" change.case$
  2470. INTEGERS { len }
  2471. FUNCTION {chop.word}
  2472. { 's :=
  2473.   'len :=
  2474.   s #1 len substring$ =
  2475.     { s len #1 + global.max$ substring$ }
  2476.     's
  2477.   if$
  2478. %<*ay>
  2479. FUNCTION {format.lab.names}
  2480. { 's :=
  2481.   s #1 "{vv~}{ll}" format.name$
  2482.   s num.names$ duplicate$
  2483.   #2 >
  2484. %<!etal-it>    { pop$ " et~al." * }
  2485. %<etal-it>    { pop$ " " * "et~al." emphasize * }
  2486.     { #2 <
  2487.         'skip$
  2488.         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  2489. %<!etal-it>            { " et~al." * }
  2490. %<etal-it>            { " " * "et~al." emphasize * }
  2491. %<*!harnm>
  2492. %<!amper>            { " and " * s #2 "{vv~}{ll}" format.name$ * }
  2493. %<amper>            { " \& " * s #2 "{vv~}{ll}" format.name$ * }
  2494. %</!harnm>
  2495. %<harnm>            { " \harvardand\ " * s #2 "{vv~}{ll}" format.name$ * }
  2496.           if$
  2497.         }
  2498.       if$
  2499.     }
  2500.   if$
  2501. FUNCTION {author.key.label}
  2502. { author empty$
  2503.     { key empty$
  2504.         { cite$ #1 #3 substring$ }
  2505.         'key 
  2506.       if$
  2507.     }
  2508.     { author format.lab.names }
  2509.   if$
  2510. FUNCTION {author.editor.key.label}
  2511. { author empty$
  2512.     { editor empty$
  2513.         { key empty$
  2514.             { cite$ #1 #3 substring$ }
  2515.             'key  
  2516.           if$
  2517.         }
  2518.         { editor format.lab.names }
  2519.       if$
  2520.     }
  2521.     { author format.lab.names }
  2522.   if$
  2523. FUNCTION {editor.key.label}
  2524. { editor empty$
  2525.     { key empty$
  2526.         { cite$ #1 #3 substring$ }
  2527.         'key 
  2528.       if$
  2529.     }
  2530.     { editor format.lab.names }
  2531.   if$
  2532. %    \end{macrocode}
  2533. % \changes{1.5a}{1994 Oct 11}{Add option \texttt{note-yr}}
  2534. %    \begin{macrocode}
  2535. FUNCTION {calc.label}
  2536. { type$ "book" =
  2537.   type$ "inbook" =
  2538.     'author.editor.key.label
  2539.     { type$ "proceedings" =
  2540.         'editor.key.label
  2541.         'author.key.label
  2542.       if$
  2543.     }
  2544.   if$
  2545. %<lab-it>  emphasize
  2546. %<!(har|ast|cay|alk|cn)>  "("
  2547. %<har|ast|cay|alk|cn>  ", "
  2548.   year duplicate$ empty$
  2549.      { pop$ "????" }
  2550. %<!note-yr>     { purify$ #-1 #4 substring$ }
  2551. %<note-yr>     'skip$
  2552.   if$
  2553.   'label :=
  2554. %<*har|cay|ast|cn>
  2555. FUNCTION {calc.short.label}
  2556. { type$ "book" =
  2557.   type$ "inbook" =
  2558.     'author.editor.key.label
  2559.     { type$ "proceedings" =
  2560.         'editor.key.label
  2561.         'author.key.label
  2562.       if$
  2563.     }
  2564.   if$
  2565. %<lab-it>  emphasize
  2566.   'label :=
  2567. %</har|cay|ast|cn>
  2568. %</ay>
  2569. FUNCTION {sort.format.names}
  2570. { 's :=
  2571.   #1 'nameptr :=
  2572.   s num.names$ 'numnames :=
  2573.   numnames 'namesleft :=
  2574.     { namesleft #0 > }
  2575.     { nameptr #1 >
  2576.         { "   " * }
  2577.         'skip$
  2578.       if$ 
  2579.       s nameptr 
  2580. %<!nm-init&!nm-rev&!nm-rev1&!nm-rv>      "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" 
  2581. %<nm-init|nm-rev|nm-rev1|nm-rv>      "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" 
  2582.       format.name$ 't := 
  2583.       nameptr numnames = t "others" = and
  2584.         { "et al" * }
  2585. %<*seq-lab>
  2586.         { numnames #2 > nameptr #2 = and
  2587.           { "zzzzzz" * #1 'namesleft := }
  2588.           { t sortify * }
  2589.         if$
  2590.         }
  2591. %</seq-lab>
  2592. %<!seq-lab>        { t sortify * }
  2593.       if$
  2594.       nameptr #1 + 'nameptr :=
  2595.       namesleft #1 - 'namesleft :=
  2596.     }
  2597.   while$
  2598. FUNCTION {sort.format.title}
  2599. { 't :=
  2600.   "A " #2
  2601.     "An " #3
  2602.       "The " #4 t chop.word
  2603.     chop.word
  2604.   chop.word
  2605.   sortify
  2606.   #1 global.max$ substring$
  2607. FUNCTION {author.sort}
  2608. { author empty$
  2609.     { key empty$
  2610.         { "to sort, need author or key in " cite$ * warning$
  2611.           ""
  2612.         }
  2613.         { key sortify }
  2614.       if$
  2615.     }
  2616.     { author sort.format.names }
  2617.   if$
  2618. FUNCTION {author.editor.sort}
  2619. { author empty$
  2620.     { editor empty$
  2621.         { key empty$
  2622.             { "to sort, need author, editor, or key in " cite$ * warning$
  2623.               ""
  2624.             }
  2625.             { key sortify }
  2626.           if$
  2627.         }
  2628.         { editor sort.format.names }
  2629.       if$
  2630.     }
  2631.     { author sort.format.names }
  2632.   if$
  2633. %<*ay>
  2634. FUNCTION {editor.sort}
  2635. { editor empty$
  2636.     { key empty$
  2637.         { "to sort, need editor or key in " cite$ * warning$
  2638.           ""
  2639.         }
  2640.         { key sortify }
  2641.       if$
  2642.     }
  2643.     { editor sort.format.names }
  2644.   if$
  2645. FUNCTION {presort}
  2646. { calc.label
  2647.   label sortify
  2648.   "    "
  2649.   type$ "book" =
  2650.   type$ "inbook" =
  2651.     'author.editor.sort
  2652.     { type$ "proceedings" =
  2653.         'editor.sort
  2654.         'author.sort
  2655.       if$
  2656.     }
  2657.   if$
  2658.   #1 entry.max$ substring$      
  2659.   'sort.label :=                
  2660.   sort.label                    
  2661.   "    "
  2662.   title field.or.null
  2663.   sort.format.title
  2664.   #1 entry.max$ substring$
  2665.   'sort.key$ :=
  2666. %</ay>
  2667. %</ay|!seq-no>
  2668. %<*!ay&!seq-no>
  2669. FUNCTION {author.organization.sort}
  2670. { author empty$
  2671.     { organization empty$
  2672.         { key empty$
  2673.             { "to sort, need author, organization, or key in " cite$ * warning$
  2674.               ""
  2675.             }
  2676.             { key sortify }
  2677.           if$
  2678.         }
  2679.         { "The " #4 organization chop.word sortify }
  2680.       if$
  2681.     }
  2682.     { author sort.format.names }
  2683.   if$
  2684. FUNCTION {editor.organization.sort}
  2685. { editor empty$
  2686.     { organization empty$
  2687.         { key empty$
  2688.             { "to sort, need editor, organization, or key in " cite$ * warning$
  2689.               ""
  2690.             }
  2691.             { key sortify }
  2692.           if$
  2693.         }
  2694.         { "The " #4 organization chop.word sortify }
  2695.       if$
  2696.     }
  2697.     { editor sort.format.names }
  2698.   if$
  2699. FUNCTION {presort}
  2700. { type$ "book" =
  2701.   type$ "inbook" =
  2702.     'author.editor.sort
  2703.     { type$ "proceedings" =
  2704.         'editor.organization.sort
  2705.         { type$ "manual" =
  2706.             'author.organization.sort
  2707.             'author.sort
  2708.           if$
  2709.         }
  2710.       if$
  2711.     }
  2712.   if$
  2713.   "    "
  2714.   year field.or.null sortify
  2715.   "    "
  2716.   title field.or.null
  2717.   sort.format.title
  2718.   #1 entry.max$ substring$
  2719.   'sort.key$ :=
  2720. %</!ay&!seq-no>
  2721. %<*(ay)|!seq-no>
  2722. ITERATE {presort}
  2723. SORT            
  2724. %</(ay)|!seq-no>
  2725. %<*ay>
  2726. STRINGS { last.label next.extra }       
  2727. INTEGERS { last.extra.num }             
  2728. FUNCTION {initialize.extra.label.stuff} 
  2729. { #0 int.to.chr$ 'last.label :=
  2730.   "" 'next.extra :=
  2731.   #0 'last.extra.num :=
  2732. FUNCTION {forward.pass}
  2733. { last.label label =
  2734.     { last.extra.num #1 + 'last.extra.num :=
  2735.       last.extra.num int.to.chr$ 'extra.label :=
  2736.     }
  2737.     { "a" chr.to.int$ 'last.extra.num :=
  2738.       "" 'extra.label :=
  2739.       label 'last.label :=
  2740.     }
  2741.   if$
  2742. FUNCTION {reverse.pass}
  2743. { next.extra "b" =
  2744.     { "a" 'extra.label := }
  2745.     'skip$
  2746.   if$
  2747.   extra.label 'next.extra :=
  2748. %<xlab-it>  extra.label emphasize 'extra.label :=
  2749. %<!(har|ast|cay|cn)>  label extra.label * 'label :=
  2750. EXECUTE {initialize.extra.label.stuff}
  2751. ITERATE {forward.pass}
  2752. REVERSE {reverse.pass}
  2753. FUNCTION {bib.sort.order}
  2754. { sort.label
  2755.   "    "
  2756.   year field.or.null sortify
  2757.   "    "
  2758.   title field.or.null
  2759.   sort.format.title
  2760.   #1 entry.max$ substring$
  2761.   'sort.key$ :=
  2762. %<har|cay|cn|ast>  calc.short.label
  2763. ITERATE {bib.sort.order}
  2764. SORT            
  2765. %</ay>
  2766. %<*!ay>
  2767. STRINGS { longest.label }
  2768. INTEGERS { number.label longest.label.width }
  2769. FUNCTION {initialize.longest.label}
  2770. { "" 'longest.label :=
  2771.   #1 'number.label :=
  2772.   #0 'longest.label.width :=
  2773. FUNCTION {longest.label.pass}
  2774. %<*!ay&!cite>
  2775. { number.label int.to.str$ 'label :=
  2776.   number.label #1 + 'number.label :=
  2777. %</!ay&!cite>
  2778. %<!ay&cite>{ cite$ 'label := 
  2779.   label width$ longest.label.width >
  2780.     { label 'longest.label :=
  2781.       label width$ 'longest.label.width :=
  2782.     }
  2783.     'skip$
  2784.   if$
  2785. EXECUTE {initialize.longest.label}
  2786. ITERATE {longest.label.pass}
  2787. %</!ay>
  2788. FUNCTION {begin.bib}
  2789. { preamble$ empty$                              
  2790.     'skip$
  2791.     { preamble$ write$ newline$ }
  2792.   if$
  2793. %<ay>  "\begin{thebibliography}{}" write$ newline$           
  2794. %<!ay>  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  2795. %<!tit-it&tit-q>  "\newcommand{\enquote}[1]{`#1'}"
  2796. %<!tit-it&!tit-q&tit-qq>  "\newcommand{\enquote}[1]{``#1''}"
  2797. %<!tit-it&(tit-q|tit-qq)>  write$ newline$
  2798. EXECUTE {begin.bib}
  2799. EXECUTE {init.state.consts}
  2800. ITERATE {call.type$}
  2801. FUNCTION {end.bib}
  2802. { newline$
  2803.   "\end{thebibliography}" write$ newline$
  2804. EXECUTE {end.bib}
  2805. %</!options>
  2806. %    \end{macrocode}
  2807. % \Finale
  2808.